//===----------------------------------------------------------------------===//
//
// This source file is part of the Soto for AWS open source project
//
// Copyright (c) 2017-2024 the Soto project authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Soto project authors
//
// SPDX-License-Identifier: Apache-2.0
//
//===----------------------------------------------------------------------===//

// THIS FILE IS AUTOMATICALLY GENERATED by https://github.com/soto-project/soto-codegenerator.
// DO NOT EDIT.

#if canImport(FoundationEssentials)
import FoundationEssentials
#else
import Foundation
#endif
@_exported import SotoCore

/// Service object for interacting with AWS Comprehend service.
///
/// Amazon Comprehend is an Amazon Web Services service for gaining insight into the content of documents. Use these actions to determine the topics contained in your documents, the topics they discuss, the predominant sentiment expressed in them, the predominant language used, and more.
public struct Comprehend: AWSService {
    // MARK: Member variables

    /// Client used for communication with AWS
    public let client: AWSClient
    /// Service configuration
    public let config: AWSServiceConfig

    // MARK: Initialization

    /// Initialize the Comprehend client
    /// - parameters:
    ///     - client: AWSClient used to process requests
    ///     - region: Region of server you want to communicate with. This will override the partition parameter.
    ///     - partition: AWS partition where service resides, standard (.aws), china (.awscn), government (.awsusgov).
    ///     - endpoint: Custom endpoint URL to use instead of standard AWS servers
    ///     - middleware: Middleware chain used to edit requests before they are sent and responses before they are decoded 
    ///     - timeout: Timeout value for HTTP requests
    ///     - byteBufferAllocator: Allocator for ByteBuffers
    ///     - options: Service options
    public init(
        client: AWSClient,
        region: SotoCore.Region? = nil,
        partition: AWSPartition = .aws,
        endpoint: String? = nil,
        middleware: AWSMiddlewareProtocol? = nil,
        timeout: TimeAmount? = nil,
        byteBufferAllocator: ByteBufferAllocator = ByteBufferAllocator(),
        options: AWSServiceConfig.Options = []
    ) {
        self.client = client
        self.config = AWSServiceConfig(
            region: region,
            partition: region?.partition ?? partition,
            amzTarget: "Comprehend_20171127",
            serviceName: "Comprehend",
            serviceIdentifier: "comprehend",
            serviceProtocol: .json(version: "1.1"),
            apiVersion: "2017-11-27",
            endpoint: endpoint,
            variantEndpoints: Self.variantEndpoints,
            errorType: ComprehendErrorType.self,
            middleware: middleware,
            timeout: timeout,
            byteBufferAllocator: byteBufferAllocator,
            options: options
        )
    }




    /// FIPS and dualstack endpoints
    static var variantEndpoints: [EndpointVariantType: AWSServiceConfig.EndpointVariant] {[
        [.dualstack]: .init(endpoints: [
            "ap-northeast-1": "comprehend.ap-northeast-1.api.aws",
            "ap-northeast-2": "comprehend.ap-northeast-2.api.aws",
            "ap-south-1": "comprehend.ap-south-1.api.aws",
            "ap-southeast-1": "comprehend.ap-southeast-1.api.aws",
            "ap-southeast-2": "comprehend.ap-southeast-2.api.aws",
            "ca-central-1": "comprehend.ca-central-1.api.aws",
            "eu-central-1": "comprehend.eu-central-1.api.aws",
            "eu-west-1": "comprehend.eu-west-1.api.aws",
            "eu-west-2": "comprehend.eu-west-2.api.aws",
            "us-east-1": "comprehend.us-east-1.api.aws",
            "us-east-2": "comprehend.us-east-2.api.aws",
            "us-gov-west-1": "comprehend.us-gov-west-1.api.aws",
            "us-west-2": "comprehend.us-west-2.api.aws"
        ]),
        [.dualstack, .fips]: .init(endpoints: [
            "ca-central-1": "comprehend-fips.ca-central-1.api.aws",
            "us-east-1": "comprehend-fips.us-east-1.api.aws",
            "us-east-2": "comprehend-fips.us-east-2.api.aws",
            "us-gov-west-1": "comprehend-fips.us-gov-west-1.api.aws",
            "us-west-2": "comprehend-fips.us-west-2.api.aws"
        ]),
        [.fips]: .init(endpoints: [
            "ca-central-1": "comprehend-fips.ca-central-1.amazonaws.com",
            "us-east-1": "comprehend-fips.us-east-1.amazonaws.com",
            "us-east-2": "comprehend-fips.us-east-2.amazonaws.com",
            "us-gov-west-1": "comprehend-fips.us-gov-west-1.amazonaws.com",
            "us-iso-east-1": "comprehend-fips.us-iso-east-1.c2s.ic.gov",
            "us-west-2": "comprehend-fips.us-west-2.amazonaws.com"
        ])
    ]}

    // MARK: API Calls

    /// Determines the dominant language of the input text for a batch of documents. For a list of languages that Amazon Comprehend can detect, see Amazon Comprehend Supported Languages.
    @Sendable
    @inlinable
    public func batchDetectDominantLanguage(_ input: BatchDetectDominantLanguageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDetectDominantLanguageResponse {
        try await self.client.execute(
            operation: "BatchDetectDominantLanguage", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Determines the dominant language of the input text for a batch of documents. For a list of languages that Amazon Comprehend can detect, see Amazon Comprehend Supported Languages.
    ///
    /// Parameters:
    ///   - textList: A list containing the UTF-8 encoded text of the input documents. The list can contain a maximum of 25 documents. Each document should contain at least 20 characters. The maximum size of each document is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDetectDominantLanguage(
        textList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDetectDominantLanguageResponse {
        let input = BatchDetectDominantLanguageRequest(
            textList: textList
        )
        return try await self.batchDetectDominantLanguage(input, logger: logger)
    }

    /// Inspects the text of a batch of documents for named entities and returns information about them. For more information about named entities, see Entities in the Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func batchDetectEntities(_ input: BatchDetectEntitiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDetectEntitiesResponse {
        try await self.client.execute(
            operation: "BatchDetectEntities", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Inspects the text of a batch of documents for named entities and returns information about them. For more information about named entities, see Entities in the Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents. You can specify any of the primary languages supported by Amazon Comprehend. All documents must be in the same language.
    ///   - textList: A list containing the UTF-8 encoded text of the input documents. The list can contain a maximum of 25 documents. The maximum size of each document is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDetectEntities(
        languageCode: LanguageCode,
        textList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDetectEntitiesResponse {
        let input = BatchDetectEntitiesRequest(
            languageCode: languageCode, 
            textList: textList
        )
        return try await self.batchDetectEntities(input, logger: logger)
    }

    /// Detects the key noun phrases found in a batch of documents.
    @Sendable
    @inlinable
    public func batchDetectKeyPhrases(_ input: BatchDetectKeyPhrasesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDetectKeyPhrasesResponse {
        try await self.client.execute(
            operation: "BatchDetectKeyPhrases", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detects the key noun phrases found in a batch of documents.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents. You can specify any of the primary languages supported by Amazon Comprehend. All documents must be in the same language.
    ///   - textList: A list containing the UTF-8 encoded text of the input documents. The list can contain a maximum of 25 documents. The maximum size of each document is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDetectKeyPhrases(
        languageCode: LanguageCode,
        textList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDetectKeyPhrasesResponse {
        let input = BatchDetectKeyPhrasesRequest(
            languageCode: languageCode, 
            textList: textList
        )
        return try await self.batchDetectKeyPhrases(input, logger: logger)
    }

    /// Inspects a batch of documents and returns an inference of the prevailing sentiment, POSITIVE, NEUTRAL, MIXED, or NEGATIVE, in each one.
    @Sendable
    @inlinable
    public func batchDetectSentiment(_ input: BatchDetectSentimentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDetectSentimentResponse {
        try await self.client.execute(
            operation: "BatchDetectSentiment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Inspects a batch of documents and returns an inference of the prevailing sentiment, POSITIVE, NEUTRAL, MIXED, or NEGATIVE, in each one.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents. You can specify any of the primary languages supported by Amazon Comprehend. All documents must be in the same language.
    ///   - textList: A list containing the UTF-8 encoded text of the input documents. The list can contain a maximum of 25 documents. The maximum size of each document is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDetectSentiment(
        languageCode: LanguageCode,
        textList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDetectSentimentResponse {
        let input = BatchDetectSentimentRequest(
            languageCode: languageCode, 
            textList: textList
        )
        return try await self.batchDetectSentiment(input, logger: logger)
    }

    /// Inspects the text of a batch of documents for the syntax and part of speech of the words in the document and returns information about them. For more information, see Syntax in the Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func batchDetectSyntax(_ input: BatchDetectSyntaxRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDetectSyntaxResponse {
        try await self.client.execute(
            operation: "BatchDetectSyntax", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Inspects the text of a batch of documents for the syntax and part of speech of the words in the document and returns information about them. For more information, see Syntax in the Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents. You can specify any of the following languages supported by Amazon Comprehend: German ("de"), English ("en"), Spanish ("es"), French ("fr"), Italian ("it"), or Portuguese ("pt"). All documents must be in the same language.
    ///   - textList: A list containing the UTF-8 encoded text of the input documents. The list can contain a maximum of 25 documents. The maximum size for each document is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDetectSyntax(
        languageCode: SyntaxLanguageCode,
        textList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDetectSyntaxResponse {
        let input = BatchDetectSyntaxRequest(
            languageCode: languageCode, 
            textList: textList
        )
        return try await self.batchDetectSyntax(input, logger: logger)
    }

    /// Inspects a batch of documents and returns a sentiment analysis for each entity identified in the documents. For more information about targeted sentiment, see Targeted sentiment in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func batchDetectTargetedSentiment(_ input: BatchDetectTargetedSentimentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> BatchDetectTargetedSentimentResponse {
        try await self.client.execute(
            operation: "BatchDetectTargetedSentiment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Inspects a batch of documents and returns a sentiment analysis for each entity identified in the documents. For more information about targeted sentiment, see Targeted sentiment in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents. Currently, English is the only supported language.
    ///   - textList: A list containing the UTF-8 encoded text of the input documents. The list can contain a maximum of 25 documents. The maximum size of each document is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func batchDetectTargetedSentiment(
        languageCode: LanguageCode,
        textList: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> BatchDetectTargetedSentimentResponse {
        let input = BatchDetectTargetedSentimentRequest(
            languageCode: languageCode, 
            textList: textList
        )
        return try await self.batchDetectTargetedSentiment(input, logger: logger)
    }

    /// Creates a classification request to analyze a single document in real-time. ClassifyDocument  supports the following model types:   Custom classifier - a custom model that you have created and trained.  For input, you can provide plain text, a single-page document (PDF, Word, or image), or  Amazon Textract API output. For more information, see Custom classification in the Amazon Comprehend Developer Guide.   Prompt safety classifier - Amazon Comprehend provides a pre-trained model for classifying  input prompts for generative AI applications.  For input, you provide English plain text input. For prompt safety classification, the response includes only the Classes field. For more information about prompt safety classifiers, see Prompt safety classification in the Amazon Comprehend Developer Guide.   If the system detects errors while processing a page in the input document, the API response includes an Errors field that describes the errors. If the system detects a document-level error in your input document, the API returns an InvalidRequestException error response. For details about this exception, see  Errors in semi-structured documents in the Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func classifyDocument(_ input: ClassifyDocumentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ClassifyDocumentResponse {
        try await self.client.execute(
            operation: "ClassifyDocument", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a classification request to analyze a single document in real-time. ClassifyDocument  supports the following model types:   Custom classifier - a custom model that you have created and trained.  For input, you can provide plain text, a single-page document (PDF, Word, or image), or  Amazon Textract API output. For more information, see Custom classification in the Amazon Comprehend Developer Guide.   Prompt safety classifier - Amazon Comprehend provides a pre-trained model for classifying  input prompts for generative AI applications.  For input, you provide English plain text input. For prompt safety classification, the response includes only the Classes field. For more information about prompt safety classifiers, see Prompt safety classification in the Amazon Comprehend Developer Guide.   If the system detects errors while processing a page in the input document, the API response includes an Errors field that describes the errors. If the system detects a document-level error in your input document, the API returns an InvalidRequestException error response. For details about this exception, see  Errors in semi-structured documents in the Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - bytes: Use the Bytes parameter to input a text, PDF, Word or image file. When you classify a document using a custom model, you can also use the Bytes parameter to input an Amazon Textract DetectDocumentText or AnalyzeDocument output file. To classify a document using the prompt safety classifier, use the Text parameter for input. Provide the input document as a sequence of base64-encoded bytes. If your code uses an Amazon Web Services SDK to classify documents, the SDK may encode the document file bytes for you.  The maximum length of this field depends on the input document type. For details, see  Inputs for real-time custom analysis in the Comprehend Developer Guide.  If you use the Bytes parameter, do not use the Text parameter.
    ///   - documentReaderConfig: Provides configuration parameters to override the default actions for extracting text from PDF documents and image files.
    ///   - endpointArn: The Amazon Resource Number (ARN) of the endpoint.  For prompt safety classification, Amazon Comprehend provides the endpoint ARN. For more information about prompt safety classifiers, see Prompt safety classification in the Amazon Comprehend Developer Guide  For custom classification, you create an endpoint for your custom model. For more information,  see Using Amazon Comprehend endpoints.
    ///   - text: The document text to be analyzed. If you enter text using this parameter, do not use the Bytes parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func classifyDocument(
        bytes: AWSBase64Data? = nil,
        documentReaderConfig: DocumentReaderConfig? = nil,
        endpointArn: String,
        text: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ClassifyDocumentResponse {
        let input = ClassifyDocumentRequest(
            bytes: bytes, 
            documentReaderConfig: documentReaderConfig, 
            endpointArn: endpointArn, 
            text: text
        )
        return try await self.classifyDocument(input, logger: logger)
    }

    /// Analyzes input text for the presence of personally identifiable information (PII) and returns the labels of identified PII entity types such as name, address, bank account number, or phone number.
    @Sendable
    @inlinable
    public func containsPiiEntities(_ input: ContainsPiiEntitiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ContainsPiiEntitiesResponse {
        try await self.client.execute(
            operation: "ContainsPiiEntities", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Analyzes input text for the presence of personally identifiable information (PII) and returns the labels of identified PII entity types such as name, address, bank account number, or phone number.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents.
    ///   - text: A UTF-8 text string. The maximum string size is 100 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func containsPiiEntities(
        languageCode: LanguageCode,
        text: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ContainsPiiEntitiesResponse {
        let input = ContainsPiiEntitiesRequest(
            languageCode: languageCode, 
            text: text
        )
        return try await self.containsPiiEntities(input, logger: logger)
    }

    /// Creates a dataset to upload training or test data for a model associated with a flywheel. For more information about datasets, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func createDataset(_ input: CreateDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDatasetResponse {
        try await self.client.execute(
            operation: "CreateDataset", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a dataset to upload training or test data for a model associated with a flywheel. For more information about datasets, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - datasetName: Name of the dataset.
    ///   - datasetType: The dataset type. You can specify that the data in a dataset is for training the model or for testing the model.
    ///   - description: Description of the dataset.
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel of the flywheel to receive the data.
    ///   - inputDataConfig: Information about the input data configuration. The type of input data varies based on the format of the input and whether the data is for a classifier model or an entity recognition model.
    ///   - tags: Tags for the dataset.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDataset(
        clientRequestToken: String? = CreateDatasetRequest.idempotencyToken(),
        datasetName: String,
        datasetType: DatasetType? = nil,
        description: String? = nil,
        flywheelArn: String,
        inputDataConfig: DatasetInputDataConfig,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDatasetResponse {
        let input = CreateDatasetRequest(
            clientRequestToken: clientRequestToken, 
            datasetName: datasetName, 
            datasetType: datasetType, 
            description: description, 
            flywheelArn: flywheelArn, 
            inputDataConfig: inputDataConfig, 
            tags: tags
        )
        return try await self.createDataset(input, logger: logger)
    }

    /// Creates a new document classifier that you can use to categorize documents. To create a classifier, you provide a set of training documents that are labeled with the categories that you want to use. For more information, see Training classifier models  in the Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func createDocumentClassifier(_ input: CreateDocumentClassifierRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateDocumentClassifierResponse {
        try await self.client.execute(
            operation: "CreateDocumentClassifier", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new document classifier that you can use to categorize documents. To create a classifier, you provide a set of training documents that are labeled with the categories that you want to use. For more information, see Training classifier models  in the Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data.
    ///   - documentClassifierName: The name of the document classifier.
    ///   - inputDataConfig: Specifies the format and location of the input data for the job.
    ///   - languageCode: The language of the input documents. You can specify any of the languages supported by Amazon Comprehend. All documents must be in the same language.
    ///   - mode: Indicates the mode in which the classifier will be trained. The classifier can be trained in multi-class (single-label) mode or multi-label mode.  Multi-class mode identifies a single class label for each document and multi-label mode identifies one or more class labels for each document. Multiple labels for an individual document are separated by a delimiter. The default delimiter between labels is a pipe (|).
    ///   - modelKmsKeyId: ID for the KMS key that Amazon Comprehend uses to encrypt trained custom models. The ModelKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - modelPolicy: The resource-based policy to attach to your custom document classifier model. You can use this policy to allow another Amazon Web Services account to import your custom model. Provide your policy as a JSON body that you enter as a UTF-8 encoded string without line breaks. To provide valid JSON, enclose the attribute names and values in double quotes. If the JSON body is also enclosed in double quotes, then you must escape the double quotes that are inside the policy:  "{\"attribute\": \"value\", \"attribute\": [\"value\"]}"  To avoid escaping quotes, you can use single quotes to enclose the policy and double quotes to enclose the JSON names and values:  '{"attribute": "value", "attribute": ["value"]}'
    ///   - outputDataConfig: Specifies the location for the output files from a custom classifier job. This parameter is required for a request that creates a native document model.
    ///   - tags: Tags to associate with the document classifier. A tag is a key-value pair that adds as a metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - versionName: The version name given to the newly created classifier. Version names can have a maximum of 256 characters. Alphanumeric characters, hyphens (-) and underscores (_) are allowed. The version name must be unique among all models with the same classifier name in the Amazon Web Services account/Amazon Web Services Region.
    ///   - volumeKmsKeyId: ID for the Amazon Web Services Key Management Service (KMS) key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig: Configuration parameters for an optional private Virtual Private Cloud (VPC) containing the resources you are using for your custom classifier. For more information, see Amazon VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func createDocumentClassifier(
        clientRequestToken: String? = CreateDocumentClassifierRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        documentClassifierName: String,
        inputDataConfig: DocumentClassifierInputDataConfig,
        languageCode: LanguageCode,
        mode: DocumentClassifierMode? = nil,
        modelKmsKeyId: String? = nil,
        modelPolicy: String? = nil,
        outputDataConfig: DocumentClassifierOutputDataConfig? = nil,
        tags: [Tag]? = nil,
        versionName: String? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateDocumentClassifierResponse {
        let input = CreateDocumentClassifierRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            documentClassifierName: documentClassifierName, 
            inputDataConfig: inputDataConfig, 
            languageCode: languageCode, 
            mode: mode, 
            modelKmsKeyId: modelKmsKeyId, 
            modelPolicy: modelPolicy, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            versionName: versionName, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.createDocumentClassifier(input, logger: logger)
    }

    /// Creates a model-specific endpoint for synchronous inference for a previously trained custom model  For information about endpoints, see Managing endpoints.
    @Sendable
    @inlinable
    public func createEndpoint(_ input: CreateEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateEndpointResponse {
        try await self.client.execute(
            operation: "CreateEndpoint", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a model-specific endpoint for synchronous inference for a previously trained custom model  For information about endpoints, see Managing endpoints.
    ///
    /// Parameters:
    ///   - clientRequestToken: An idempotency token provided by the customer. If this token matches a previous endpoint creation request, Amazon Comprehend will not return a ResourceInUseException.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to trained custom models encrypted with a customer managed key (ModelKmsKeyId).
    ///   - desiredInferenceUnits:  The desired number of inference units to be used by the model using this endpoint.  Each inference unit represents of a throughput of 100 characters per second.
    ///   - endpointName: This is the descriptive suffix that becomes part of the EndpointArn used for all subsequent requests to this resource.
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel to which the endpoint will be attached.
    ///   - modelArn: The Amazon Resource Number (ARN) of the model to which the endpoint will be attached.
    ///   - tags: Tags to associate with the endpoint. A tag is a key-value pair that adds metadata to the endpoint. For example, a tag with "Sales" as the key might be added to an endpoint to indicate its use by the sales department.
    ///   - logger: Logger use during operation
    @inlinable
    public func createEndpoint(
        clientRequestToken: String? = CreateEndpointRequest.idempotencyToken(),
        dataAccessRoleArn: String? = nil,
        desiredInferenceUnits: Int,
        endpointName: String,
        flywheelArn: String? = nil,
        modelArn: String? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateEndpointResponse {
        let input = CreateEndpointRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            desiredInferenceUnits: desiredInferenceUnits, 
            endpointName: endpointName, 
            flywheelArn: flywheelArn, 
            modelArn: modelArn, 
            tags: tags
        )
        return try await self.createEndpoint(input, logger: logger)
    }

    /// Creates an entity recognizer using submitted files. After your CreateEntityRecognizer request is submitted, you can check job status using the DescribeEntityRecognizer API.
    @Sendable
    @inlinable
    public func createEntityRecognizer(_ input: CreateEntityRecognizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateEntityRecognizerResponse {
        try await self.client.execute(
            operation: "CreateEntityRecognizer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates an entity recognizer using submitted files. After your CreateEntityRecognizer request is submitted, you can check job status using the DescribeEntityRecognizer API.
    ///
    /// Parameters:
    ///   - clientRequestToken:  A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data.
    ///   - inputDataConfig: Specifies the format and location of the input data. The S3 bucket containing the input data must be located in the same Region as the entity recognizer being created.
    ///   - languageCode:  You can specify any of the following languages: English ("en"), Spanish ("es"), French ("fr"), Italian ("it"), German ("de"), or Portuguese ("pt"). If you plan to use this entity recognizer with PDF, Word, or image input files, you must specify English as the language. All training documents must be in the same language.
    ///   - modelKmsKeyId: ID for the KMS key that Amazon Comprehend uses to encrypt trained custom models. The ModelKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - modelPolicy: The JSON resource-based policy to attach to your custom entity recognizer model. You can use this policy to allow another Amazon Web Services account to import your custom model. Provide your JSON as a UTF-8 encoded string without line breaks. To provide valid JSON for your policy, enclose the attribute names and values in double quotes. If the JSON body is also enclosed in double quotes, then you must escape the double quotes that are inside the policy:  "{\"attribute\": \"value\", \"attribute\": [\"value\"]}"  To avoid escaping quotes, you can use single quotes to enclose the policy and double quotes to enclose the JSON names and values:  '{"attribute": "value", "attribute": ["value"]}'
    ///   - recognizerName: The name given to the newly created recognizer. Recognizer names can be a maximum of 256 characters. Alphanumeric characters, hyphens (-) and underscores (_) are allowed. The name must be unique in the account/Region.
    ///   - tags: Tags to associate with the entity recognizer. A tag is a key-value pair that adds as a metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - versionName: The version name given to the newly created recognizer. Version names can be a maximum of 256 characters. Alphanumeric characters, hyphens (-) and underscores (_) are allowed. The version name must be unique among all models with the same recognizer name in the account/Region.
    ///   - volumeKmsKeyId: ID for the Amazon Web Services Key Management Service (KMS) key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig: Configuration parameters for an optional private Virtual Private Cloud (VPC) containing the resources you are using for your custom entity recognizer. For more information, see Amazon VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func createEntityRecognizer(
        clientRequestToken: String? = CreateEntityRecognizerRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        inputDataConfig: EntityRecognizerInputDataConfig,
        languageCode: LanguageCode,
        modelKmsKeyId: String? = nil,
        modelPolicy: String? = nil,
        recognizerName: String,
        tags: [Tag]? = nil,
        versionName: String? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateEntityRecognizerResponse {
        let input = CreateEntityRecognizerRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            inputDataConfig: inputDataConfig, 
            languageCode: languageCode, 
            modelKmsKeyId: modelKmsKeyId, 
            modelPolicy: modelPolicy, 
            recognizerName: recognizerName, 
            tags: tags, 
            versionName: versionName, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.createEntityRecognizer(input, logger: logger)
    }

    /// A flywheel is an Amazon Web Services resource that orchestrates the ongoing training of a model for custom classification or custom entity recognition. You can create a flywheel to start with an existing trained model, or Comprehend can create and train a new model. When you create the flywheel, Comprehend creates a data lake in your account. The data lake holds the training data and test data for all versions of the model. To use a flywheel with an existing trained model, you specify the active model version. Comprehend copies the model's training data and test data into the flywheel's data lake. To use the flywheel with a new model, you need to provide a dataset for training data (and optional test data) when you create the flywheel. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func createFlywheel(_ input: CreateFlywheelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> CreateFlywheelResponse {
        try await self.client.execute(
            operation: "CreateFlywheel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// A flywheel is an Amazon Web Services resource that orchestrates the ongoing training of a model for custom classification or custom entity recognition. You can create a flywheel to start with an existing trained model, or Comprehend can create and train a new model. When you create the flywheel, Comprehend creates a data lake in your account. The data lake holds the training data and test data for all versions of the model. To use a flywheel with an existing trained model, you specify the active model version. Comprehend copies the model's training data and test data into the flywheel's data lake. To use the flywheel with a new model, you need to provide a dataset for training data (and optional test data) when you create the flywheel. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - activeModelArn: To associate an existing model with the flywheel, specify the Amazon Resource Number (ARN) of the model version. Do not set TaskConfig or ModelType if you specify an ActiveModelArn.
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend the permissions required to access the flywheel data in the data lake.
    ///   - dataLakeS3Uri: Enter the S3 location for the data lake. You can specify a new S3 bucket or a new folder of an existing S3 bucket. The flywheel creates the data lake at this location.
    ///   - dataSecurityConfig: Data security configurations.
    ///   - flywheelName: Name for the flywheel.
    ///   - modelType: The model type. You need to set ModelType if you are creating a flywheel for a new model.
    ///   - tags: The tags to associate with this flywheel.
    ///   - taskConfig: Configuration about the model associated with the flywheel. You need to set TaskConfig if you are creating a flywheel for a new model.
    ///   - logger: Logger use during operation
    @inlinable
    public func createFlywheel(
        activeModelArn: String? = nil,
        clientRequestToken: String? = CreateFlywheelRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        dataLakeS3Uri: String,
        dataSecurityConfig: DataSecurityConfig? = nil,
        flywheelName: String,
        modelType: ModelType? = nil,
        tags: [Tag]? = nil,
        taskConfig: TaskConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> CreateFlywheelResponse {
        let input = CreateFlywheelRequest(
            activeModelArn: activeModelArn, 
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            dataLakeS3Uri: dataLakeS3Uri, 
            dataSecurityConfig: dataSecurityConfig, 
            flywheelName: flywheelName, 
            modelType: modelType, 
            tags: tags, 
            taskConfig: taskConfig
        )
        return try await self.createFlywheel(input, logger: logger)
    }

    /// Deletes a previously created document classifier Only those classifiers that are in terminated states (IN_ERROR, TRAINED) will be deleted. If an active inference job is using the model, a ResourceInUseException will be returned. This is an asynchronous action that puts the classifier into a DELETING state, and it is then removed by a background job. Once removed, the classifier disappears from your account and is no longer available for use.
    @Sendable
    @inlinable
    public func deleteDocumentClassifier(_ input: DeleteDocumentClassifierRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteDocumentClassifierResponse {
        try await self.client.execute(
            operation: "DeleteDocumentClassifier", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a previously created document classifier Only those classifiers that are in terminated states (IN_ERROR, TRAINED) will be deleted. If an active inference job is using the model, a ResourceInUseException will be returned. This is an asynchronous action that puts the classifier into a DELETING state, and it is then removed by a background job. Once removed, the classifier disappears from your account and is no longer available for use.
    ///
    /// Parameters:
    ///   - documentClassifierArn: The Amazon Resource Name (ARN) that identifies the document classifier.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteDocumentClassifier(
        documentClassifierArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteDocumentClassifierResponse {
        let input = DeleteDocumentClassifierRequest(
            documentClassifierArn: documentClassifierArn
        )
        return try await self.deleteDocumentClassifier(input, logger: logger)
    }

    /// Deletes a model-specific endpoint for a previously-trained custom model. All endpoints must be deleted in order for the model to be deleted. For information about endpoints, see Managing endpoints.
    @Sendable
    @inlinable
    public func deleteEndpoint(_ input: DeleteEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEndpointResponse {
        try await self.client.execute(
            operation: "DeleteEndpoint", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a model-specific endpoint for a previously-trained custom model. All endpoints must be deleted in order for the model to be deleted. For information about endpoints, see Managing endpoints.
    ///
    /// Parameters:
    ///   - endpointArn: The Amazon Resource Number (ARN) of the endpoint being deleted.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEndpoint(
        endpointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEndpointResponse {
        let input = DeleteEndpointRequest(
            endpointArn: endpointArn
        )
        return try await self.deleteEndpoint(input, logger: logger)
    }

    /// Deletes an entity recognizer. Only those recognizers that are in terminated states (IN_ERROR, TRAINED) will be deleted. If an active inference job is using the model, a ResourceInUseException will be returned. This is an asynchronous action that puts the recognizer into a DELETING state, and it is then removed by a background job. Once removed, the recognizer disappears from your account and is no longer available for use.
    @Sendable
    @inlinable
    public func deleteEntityRecognizer(_ input: DeleteEntityRecognizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteEntityRecognizerResponse {
        try await self.client.execute(
            operation: "DeleteEntityRecognizer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes an entity recognizer. Only those recognizers that are in terminated states (IN_ERROR, TRAINED) will be deleted. If an active inference job is using the model, a ResourceInUseException will be returned. This is an asynchronous action that puts the recognizer into a DELETING state, and it is then removed by a background job. Once removed, the recognizer disappears from your account and is no longer available for use.
    ///
    /// Parameters:
    ///   - entityRecognizerArn: The Amazon Resource Name (ARN) that identifies the entity recognizer.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteEntityRecognizer(
        entityRecognizerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteEntityRecognizerResponse {
        let input = DeleteEntityRecognizerRequest(
            entityRecognizerArn: entityRecognizerArn
        )
        return try await self.deleteEntityRecognizer(input, logger: logger)
    }

    /// Deletes a flywheel. When you delete the flywheel, Amazon Comprehend does not delete the data lake or the model associated with the flywheel. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func deleteFlywheel(_ input: DeleteFlywheelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteFlywheelResponse {
        try await self.client.execute(
            operation: "DeleteFlywheel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a flywheel. When you delete the flywheel, Amazon Comprehend does not delete the data lake or the model associated with the flywheel. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteFlywheel(
        flywheelArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteFlywheelResponse {
        let input = DeleteFlywheelRequest(
            flywheelArn: flywheelArn
        )
        return try await self.deleteFlywheel(input, logger: logger)
    }

    /// Deletes a resource-based policy that is attached to a custom model.
    @Sendable
    @inlinable
    public func deleteResourcePolicy(_ input: DeleteResourcePolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DeleteResourcePolicyResponse {
        try await self.client.execute(
            operation: "DeleteResourcePolicy", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Deletes a resource-based policy that is attached to a custom model.
    ///
    /// Parameters:
    ///   - policyRevisionId: The revision ID of the policy to delete.
    ///   - resourceArn: The Amazon Resource Name (ARN) of the custom model version that has the policy to delete.
    ///   - logger: Logger use during operation
    @inlinable
    public func deleteResourcePolicy(
        policyRevisionId: String? = nil,
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DeleteResourcePolicyResponse {
        let input = DeleteResourcePolicyRequest(
            policyRevisionId: policyRevisionId, 
            resourceArn: resourceArn
        )
        return try await self.deleteResourcePolicy(input, logger: logger)
    }

    /// Returns information about the dataset that you specify.  For more information about datasets, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func describeDataset(_ input: DescribeDatasetRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDatasetResponse {
        try await self.client.execute(
            operation: "DescribeDataset", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Returns information about the dataset that you specify.  For more information about datasets, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - datasetArn: The ARN of the dataset.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDataset(
        datasetArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDatasetResponse {
        let input = DescribeDatasetRequest(
            datasetArn: datasetArn
        )
        return try await self.describeDataset(input, logger: logger)
    }

    /// Gets the properties associated with a document classification job. Use this operation to get the status of a classification job.
    @Sendable
    @inlinable
    public func describeDocumentClassificationJob(_ input: DescribeDocumentClassificationJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDocumentClassificationJobResponse {
        try await self.client.execute(
            operation: "DescribeDocumentClassificationJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a document classification job. Use this operation to get the status of a classification job.
    ///
    /// Parameters:
    ///   - jobId: The identifier that Amazon Comprehend generated for the job. The   StartDocumentClassificationJob operation returns this identifier in its response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDocumentClassificationJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDocumentClassificationJobResponse {
        let input = DescribeDocumentClassificationJobRequest(
            jobId: jobId
        )
        return try await self.describeDocumentClassificationJob(input, logger: logger)
    }

    /// Gets the properties associated with a document classifier.
    @Sendable
    @inlinable
    public func describeDocumentClassifier(_ input: DescribeDocumentClassifierRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDocumentClassifierResponse {
        try await self.client.execute(
            operation: "DescribeDocumentClassifier", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a document classifier.
    ///
    /// Parameters:
    ///   - documentClassifierArn: The Amazon Resource Name (ARN) that identifies the document classifier. The   CreateDocumentClassifier operation returns this identifier in its response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDocumentClassifier(
        documentClassifierArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDocumentClassifierResponse {
        let input = DescribeDocumentClassifierRequest(
            documentClassifierArn: documentClassifierArn
        )
        return try await self.describeDocumentClassifier(input, logger: logger)
    }

    /// Gets the properties associated with a dominant language detection job. Use this operation to get the status of a detection job.
    @Sendable
    @inlinable
    public func describeDominantLanguageDetectionJob(_ input: DescribeDominantLanguageDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeDominantLanguageDetectionJobResponse {
        try await self.client.execute(
            operation: "DescribeDominantLanguageDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a dominant language detection job. Use this operation to get the status of a detection job.
    ///
    /// Parameters:
    ///   - jobId: The identifier that Amazon Comprehend generated for the job. The   StartDominantLanguageDetectionJob operation returns this identifier in its response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeDominantLanguageDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeDominantLanguageDetectionJobResponse {
        let input = DescribeDominantLanguageDetectionJobRequest(
            jobId: jobId
        )
        return try await self.describeDominantLanguageDetectionJob(input, logger: logger)
    }

    /// Gets the properties associated with a specific endpoint. Use this operation to get the status of an endpoint. For information about endpoints, see Managing endpoints.
    @Sendable
    @inlinable
    public func describeEndpoint(_ input: DescribeEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEndpointResponse {
        try await self.client.execute(
            operation: "DescribeEndpoint", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a specific endpoint. Use this operation to get the status of an endpoint. For information about endpoints, see Managing endpoints.
    ///
    /// Parameters:
    ///   - endpointArn: The Amazon Resource Number (ARN) of the endpoint being described.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEndpoint(
        endpointArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEndpointResponse {
        let input = DescribeEndpointRequest(
            endpointArn: endpointArn
        )
        return try await self.describeEndpoint(input, logger: logger)
    }

    /// Gets the properties associated with an entities detection job. Use this operation to get the status of a detection job.
    @Sendable
    @inlinable
    public func describeEntitiesDetectionJob(_ input: DescribeEntitiesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEntitiesDetectionJobResponse {
        try await self.client.execute(
            operation: "DescribeEntitiesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with an entities detection job. Use this operation to get the status of a detection job.
    ///
    /// Parameters:
    ///   - jobId: The identifier that Amazon Comprehend generated for the job. The  StartEntitiesDetectionJob operation returns this identifier in its response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEntitiesDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEntitiesDetectionJobResponse {
        let input = DescribeEntitiesDetectionJobRequest(
            jobId: jobId
        )
        return try await self.describeEntitiesDetectionJob(input, logger: logger)
    }

    /// Provides details about an entity recognizer including status, S3 buckets containing training data, recognizer metadata, metrics, and so on.
    @Sendable
    @inlinable
    public func describeEntityRecognizer(_ input: DescribeEntityRecognizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEntityRecognizerResponse {
        try await self.client.execute(
            operation: "DescribeEntityRecognizer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides details about an entity recognizer including status, S3 buckets containing training data, recognizer metadata, metrics, and so on.
    ///
    /// Parameters:
    ///   - entityRecognizerArn: The Amazon Resource Name (ARN) that identifies the entity recognizer.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEntityRecognizer(
        entityRecognizerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEntityRecognizerResponse {
        let input = DescribeEntityRecognizerRequest(
            entityRecognizerArn: entityRecognizerArn
        )
        return try await self.describeEntityRecognizer(input, logger: logger)
    }

    /// Gets the status and details of an events detection job.
    @Sendable
    @inlinable
    public func describeEventsDetectionJob(_ input: DescribeEventsDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeEventsDetectionJobResponse {
        try await self.client.execute(
            operation: "DescribeEventsDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the status and details of an events detection job.
    ///
    /// Parameters:
    ///   - jobId: The identifier of the events detection job.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeEventsDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeEventsDetectionJobResponse {
        let input = DescribeEventsDetectionJobRequest(
            jobId: jobId
        )
        return try await self.describeEventsDetectionJob(input, logger: logger)
    }

    /// Provides configuration information about the flywheel. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func describeFlywheel(_ input: DescribeFlywheelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFlywheelResponse {
        try await self.client.execute(
            operation: "DescribeFlywheel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Provides configuration information about the flywheel. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFlywheel(
        flywheelArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFlywheelResponse {
        let input = DescribeFlywheelRequest(
            flywheelArn: flywheelArn
        )
        return try await self.describeFlywheel(input, logger: logger)
    }

    /// Retrieve the configuration properties of a flywheel iteration. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func describeFlywheelIteration(_ input: DescribeFlywheelIterationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeFlywheelIterationResponse {
        try await self.client.execute(
            operation: "DescribeFlywheelIteration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Retrieve the configuration properties of a flywheel iteration. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - flywheelArn: 
    ///   - flywheelIterationId: 
    ///   - logger: Logger use during operation
    @inlinable
    public func describeFlywheelIteration(
        flywheelArn: String,
        flywheelIterationId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeFlywheelIterationResponse {
        let input = DescribeFlywheelIterationRequest(
            flywheelArn: flywheelArn, 
            flywheelIterationId: flywheelIterationId
        )
        return try await self.describeFlywheelIteration(input, logger: logger)
    }

    /// Gets the properties associated with a key phrases detection job. Use this operation to get the status of a detection job.
    @Sendable
    @inlinable
    public func describeKeyPhrasesDetectionJob(_ input: DescribeKeyPhrasesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeKeyPhrasesDetectionJobResponse {
        try await self.client.execute(
            operation: "DescribeKeyPhrasesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a key phrases detection job. Use this operation to get the status of a detection job.
    ///
    /// Parameters:
    ///   - jobId: The identifier that Amazon Comprehend generated for the job. The  StartKeyPhrasesDetectionJob operation returns this identifier in its response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeKeyPhrasesDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeKeyPhrasesDetectionJobResponse {
        let input = DescribeKeyPhrasesDetectionJobRequest(
            jobId: jobId
        )
        return try await self.describeKeyPhrasesDetectionJob(input, logger: logger)
    }

    /// Gets the properties associated with a PII entities detection job. For example, you can use this operation to get the job status.
    @Sendable
    @inlinable
    public func describePiiEntitiesDetectionJob(_ input: DescribePiiEntitiesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribePiiEntitiesDetectionJobResponse {
        try await self.client.execute(
            operation: "DescribePiiEntitiesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a PII entities detection job. For example, you can use this operation to get the job status.
    ///
    /// Parameters:
    ///   - jobId: The identifier that Amazon Comprehend generated for the job. The  operation returns this identifier in its response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describePiiEntitiesDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribePiiEntitiesDetectionJobResponse {
        let input = DescribePiiEntitiesDetectionJobRequest(
            jobId: jobId
        )
        return try await self.describePiiEntitiesDetectionJob(input, logger: logger)
    }

    /// Gets the details of a resource-based policy that is attached to a custom model, including the JSON body of the policy.
    @Sendable
    @inlinable
    public func describeResourcePolicy(_ input: DescribeResourcePolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeResourcePolicyResponse {
        try await self.client.execute(
            operation: "DescribeResourcePolicy", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the details of a resource-based policy that is attached to a custom model, including the JSON body of the policy.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the custom model version that has the resource policy.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeResourcePolicy(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeResourcePolicyResponse {
        let input = DescribeResourcePolicyRequest(
            resourceArn: resourceArn
        )
        return try await self.describeResourcePolicy(input, logger: logger)
    }

    /// Gets the properties associated with a sentiment detection job. Use this operation to get the status of a detection job.
    @Sendable
    @inlinable
    public func describeSentimentDetectionJob(_ input: DescribeSentimentDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeSentimentDetectionJobResponse {
        try await self.client.execute(
            operation: "DescribeSentimentDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a sentiment detection job. Use this operation to get the status of a detection job.
    ///
    /// Parameters:
    ///   - jobId: The identifier that Amazon Comprehend generated for the job. The  operation returns this identifier in its response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeSentimentDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeSentimentDetectionJobResponse {
        let input = DescribeSentimentDetectionJobRequest(
            jobId: jobId
        )
        return try await self.describeSentimentDetectionJob(input, logger: logger)
    }

    /// Gets the properties associated with a targeted sentiment detection job. Use this operation to get the status of the job.
    @Sendable
    @inlinable
    public func describeTargetedSentimentDetectionJob(_ input: DescribeTargetedSentimentDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeTargetedSentimentDetectionJobResponse {
        try await self.client.execute(
            operation: "DescribeTargetedSentimentDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a targeted sentiment detection job. Use this operation to get the status of the job.
    ///
    /// Parameters:
    ///   - jobId: The identifier that Amazon Comprehend generated for the job. The   StartTargetedSentimentDetectionJob operation returns this identifier in its response.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeTargetedSentimentDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeTargetedSentimentDetectionJobResponse {
        let input = DescribeTargetedSentimentDetectionJobRequest(
            jobId: jobId
        )
        return try await self.describeTargetedSentimentDetectionJob(input, logger: logger)
    }

    /// Gets the properties associated with a topic detection job. Use this operation to get the status of a detection job.
    @Sendable
    @inlinable
    public func describeTopicsDetectionJob(_ input: DescribeTopicsDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DescribeTopicsDetectionJobResponse {
        try await self.client.execute(
            operation: "DescribeTopicsDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets the properties associated with a topic detection job. Use this operation to get the status of a detection job.
    ///
    /// Parameters:
    ///   - jobId: The identifier assigned by the user to the detection job.
    ///   - logger: Logger use during operation
    @inlinable
    public func describeTopicsDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DescribeTopicsDetectionJobResponse {
        let input = DescribeTopicsDetectionJobRequest(
            jobId: jobId
        )
        return try await self.describeTopicsDetectionJob(input, logger: logger)
    }

    /// Determines the dominant language of the input text. For a list of languages that Amazon Comprehend can detect, see Amazon Comprehend Supported Languages.
    @Sendable
    @inlinable
    public func detectDominantLanguage(_ input: DetectDominantLanguageRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetectDominantLanguageResponse {
        try await self.client.execute(
            operation: "DetectDominantLanguage", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Determines the dominant language of the input text. For a list of languages that Amazon Comprehend can detect, see Amazon Comprehend Supported Languages.
    ///
    /// Parameters:
    ///   - text: A UTF-8 text string. The string must contain at least 20 characters. The maximum string size is 100 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func detectDominantLanguage(
        text: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetectDominantLanguageResponse {
        let input = DetectDominantLanguageRequest(
            text: text
        )
        return try await self.detectDominantLanguage(input, logger: logger)
    }

    /// Detects named entities in input text when you use the pre-trained model. Detects custom entities if you have a custom entity recognition model.   When detecting named entities using the pre-trained model, use plain text as the input. For more information about named entities, see Entities in the Comprehend Developer Guide. When you use a custom entity recognition model, you can input plain text or you can upload a single-page input document (text, PDF, Word, or image).  If the system detects errors while processing a page in the input document, the API response includes an entry in Errors for each error.  If the system detects a document-level error in your input document, the API returns an InvalidRequestException error response. For details about this exception, see  Errors in semi-structured documents in the Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func detectEntities(_ input: DetectEntitiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetectEntitiesResponse {
        try await self.client.execute(
            operation: "DetectEntities", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detects named entities in input text when you use the pre-trained model. Detects custom entities if you have a custom entity recognition model.   When detecting named entities using the pre-trained model, use plain text as the input. For more information about named entities, see Entities in the Comprehend Developer Guide. When you use a custom entity recognition model, you can input plain text or you can upload a single-page input document (text, PDF, Word, or image).  If the system detects errors while processing a page in the input document, the API response includes an entry in Errors for each error.  If the system detects a document-level error in your input document, the API returns an InvalidRequestException error response. For details about this exception, see  Errors in semi-structured documents in the Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - bytes: This field applies only when you use a custom entity recognition model that was trained with PDF annotations. For other cases, enter your text input in the Text field.  Use the Bytes parameter to input a text, PDF, Word or image file. Using a plain-text file in the Bytes parameter is equivelent to using the Text parameter (the Entities field in the response is identical). You can also use the Bytes parameter to input an Amazon Textract DetectDocumentText or AnalyzeDocument output file. Provide the input document as a sequence of base64-encoded bytes. If your code uses an Amazon Web Services SDK to detect entities, the SDK may encode the document file bytes for you.  The maximum length of this field depends on the input document type. For details, see  Inputs for real-time custom analysis in the Comprehend Developer Guide.  If you use the Bytes parameter, do not use the Text parameter.
    ///   - documentReaderConfig: Provides configuration parameters to override the default actions for extracting text from PDF documents and image files.
    ///   - endpointArn: The Amazon Resource Name of an endpoint that is associated with a custom entity recognition model. Provide an endpoint if you want to detect entities by using your own custom model instead of the default model that is used by Amazon Comprehend. If you specify an endpoint, Amazon Comprehend uses the language of your custom model, and it ignores any language code that you provide in your request. For information about endpoints, see Managing endpoints.
    ///   - languageCode: The language of the input documents. You can specify any of the primary languages supported by Amazon Comprehend. If your request includes the endpoint for a custom entity recognition model, Amazon Comprehend uses the language of your custom model, and it ignores any language code that you specify here. All input documents must be in the same language.
    ///   - text: A UTF-8 text string. The maximum string size is 100 KB. If you enter text using this parameter, do not use the Bytes parameter.
    ///   - logger: Logger use during operation
    @inlinable
    public func detectEntities(
        bytes: AWSBase64Data? = nil,
        documentReaderConfig: DocumentReaderConfig? = nil,
        endpointArn: String? = nil,
        languageCode: LanguageCode? = nil,
        text: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetectEntitiesResponse {
        let input = DetectEntitiesRequest(
            bytes: bytes, 
            documentReaderConfig: documentReaderConfig, 
            endpointArn: endpointArn, 
            languageCode: languageCode, 
            text: text
        )
        return try await self.detectEntities(input, logger: logger)
    }

    /// Detects the key noun phrases found in the text.
    @Sendable
    @inlinable
    public func detectKeyPhrases(_ input: DetectKeyPhrasesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetectKeyPhrasesResponse {
        try await self.client.execute(
            operation: "DetectKeyPhrases", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Detects the key noun phrases found in the text.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents. You can specify any of the primary languages supported by Amazon Comprehend. All documents must be in the same language.
    ///   - text: A UTF-8 text string. The string must contain less than 100 KB of UTF-8 encoded characters.
    ///   - logger: Logger use during operation
    @inlinable
    public func detectKeyPhrases(
        languageCode: LanguageCode,
        text: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetectKeyPhrasesResponse {
        let input = DetectKeyPhrasesRequest(
            languageCode: languageCode, 
            text: text
        )
        return try await self.detectKeyPhrases(input, logger: logger)
    }

    /// Inspects the input text for entities that contain personally identifiable information (PII) and returns information about them.
    @Sendable
    @inlinable
    public func detectPiiEntities(_ input: DetectPiiEntitiesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetectPiiEntitiesResponse {
        try await self.client.execute(
            operation: "DetectPiiEntities", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Inspects the input text for entities that contain personally identifiable information (PII) and returns information about them.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input text.    Enter the language code for English (en) or Spanish (es).
    ///   - text: A UTF-8 text string. The maximum string size is 100 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func detectPiiEntities(
        languageCode: LanguageCode,
        text: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetectPiiEntitiesResponse {
        let input = DetectPiiEntitiesRequest(
            languageCode: languageCode, 
            text: text
        )
        return try await self.detectPiiEntities(input, logger: logger)
    }

    /// Inspects text and returns an inference of the prevailing sentiment (POSITIVE, NEUTRAL, MIXED, or NEGATIVE).
    @Sendable
    @inlinable
    public func detectSentiment(_ input: DetectSentimentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetectSentimentResponse {
        try await self.client.execute(
            operation: "DetectSentiment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Inspects text and returns an inference of the prevailing sentiment (POSITIVE, NEUTRAL, MIXED, or NEGATIVE).
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents. You can specify any of the primary languages supported by Amazon Comprehend. All documents must be in the same language.
    ///   - text: A UTF-8 text string. The maximum string size is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func detectSentiment(
        languageCode: LanguageCode,
        text: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetectSentimentResponse {
        let input = DetectSentimentRequest(
            languageCode: languageCode, 
            text: text
        )
        return try await self.detectSentiment(input, logger: logger)
    }

    /// Inspects text for syntax and the part of speech of words in the document. For more information, see Syntax in the Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func detectSyntax(_ input: DetectSyntaxRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetectSyntaxResponse {
        try await self.client.execute(
            operation: "DetectSyntax", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Inspects text for syntax and the part of speech of words in the document. For more information, see Syntax in the Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - languageCode: The language code of the input documents. You can specify any of the following languages supported by Amazon Comprehend: German ("de"), English ("en"), Spanish ("es"), French ("fr"), Italian ("it"), or Portuguese ("pt").
    ///   - text: A UTF-8 string. The maximum string size is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func detectSyntax(
        languageCode: SyntaxLanguageCode,
        text: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetectSyntaxResponse {
        let input = DetectSyntaxRequest(
            languageCode: languageCode, 
            text: text
        )
        return try await self.detectSyntax(input, logger: logger)
    }

    /// Inspects the input text and returns a sentiment analysis for each entity identified in the text. For more information about targeted sentiment, see Targeted sentiment in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func detectTargetedSentiment(_ input: DetectTargetedSentimentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetectTargetedSentimentResponse {
        try await self.client.execute(
            operation: "DetectTargetedSentiment", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Inspects the input text and returns a sentiment analysis for each entity identified in the text. For more information about targeted sentiment, see Targeted sentiment in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input documents. Currently, English is the only supported language.
    ///   - text: A UTF-8 text string. The maximum string length is 5 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func detectTargetedSentiment(
        languageCode: LanguageCode,
        text: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetectTargetedSentimentResponse {
        let input = DetectTargetedSentimentRequest(
            languageCode: languageCode, 
            text: text
        )
        return try await self.detectTargetedSentiment(input, logger: logger)
    }

    /// Performs toxicity analysis on the list of text strings that you provide as input. The API response contains a results list that matches the size of the input list. For more information about toxicity detection, see Toxicity detection in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func detectToxicContent(_ input: DetectToxicContentRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> DetectToxicContentResponse {
        try await self.client.execute(
            operation: "DetectToxicContent", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Performs toxicity analysis on the list of text strings that you provide as input. The API response contains a results list that matches the size of the input list. For more information about toxicity detection, see Toxicity detection in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - languageCode: The language of the input text. Currently, English is the only supported language.
    ///   - textSegments: A list of up to 10 text strings. Each string has a maximum size of 1 KB, and the maximum size of the list is 10 KB.
    ///   - logger: Logger use during operation
    @inlinable
    public func detectToxicContent(
        languageCode: LanguageCode,
        textSegments: [TextSegment],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> DetectToxicContentResponse {
        let input = DetectToxicContentRequest(
            languageCode: languageCode, 
            textSegments: textSegments
        )
        return try await self.detectToxicContent(input, logger: logger)
    }

    /// Creates a new custom model that replicates a source custom model that you import. The source model can be in your Amazon Web Services account or another one. If the source model is in another Amazon Web Services account, then it must have a resource-based policy that authorizes you to import it. The source model must be in the same Amazon Web Services Region that you're using when you import. You can't import a model that's in a different Region.
    @Sendable
    @inlinable
    public func importModel(_ input: ImportModelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ImportModelResponse {
        try await self.client.execute(
            operation: "ImportModel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Creates a new custom model that replicates a source custom model that you import. The source model can be in your Amazon Web Services account or another one. If the source model is in another Amazon Web Services account, then it must have a resource-based policy that authorizes you to import it. The source model must be in the same Amazon Web Services Region that you're using when you import. You can't import a model that's in a different Region.
    ///
    /// Parameters:
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend permission to use Amazon Key Management Service (KMS) to encrypt or decrypt the custom model.
    ///   - modelKmsKeyId: ID for the KMS key that Amazon Comprehend uses to encrypt trained custom models. The ModelKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - modelName: The name to assign to the custom model that is created in Amazon Comprehend by this import.
    ///   - sourceModelArn: The Amazon Resource Name (ARN) of the custom model to import.
    ///   - tags: Tags to associate with the custom model that is created by this import. A tag is a key-value pair that adds as a metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - versionName: The version name given to the custom model that is created by this import. Version names can have a maximum of 256 characters. Alphanumeric characters, hyphens (-) and underscores (_) are allowed. The version name must be unique among all models with the same classifier name in the account/Region.
    ///   - logger: Logger use during operation
    @inlinable
    public func importModel(
        dataAccessRoleArn: String? = nil,
        modelKmsKeyId: String? = nil,
        modelName: String? = nil,
        sourceModelArn: String,
        tags: [Tag]? = nil,
        versionName: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ImportModelResponse {
        let input = ImportModelRequest(
            dataAccessRoleArn: dataAccessRoleArn, 
            modelKmsKeyId: modelKmsKeyId, 
            modelName: modelName, 
            sourceModelArn: sourceModelArn, 
            tags: tags, 
            versionName: versionName
        )
        return try await self.importModel(input, logger: logger)
    }

    /// List the datasets that you have configured in this Region. For more information about datasets, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func listDatasets(_ input: ListDatasetsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDatasetsResponse {
        try await self.client.execute(
            operation: "ListDatasets", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// List the datasets that you have configured in this Region. For more information about datasets, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - filter: Filters the datasets to be returned in the response.
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel.
    ///   - maxResults: Maximum number of results to return in a response. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDatasets(
        filter: DatasetFilter? = nil,
        flywheelArn: String? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDatasetsResponse {
        let input = ListDatasetsRequest(
            filter: filter, 
            flywheelArn: flywheelArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDatasets(input, logger: logger)
    }

    /// Gets a list of the documentation classification jobs that you have submitted.
    @Sendable
    @inlinable
    public func listDocumentClassificationJobs(_ input: ListDocumentClassificationJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDocumentClassificationJobsResponse {
        try await self.client.execute(
            operation: "ListDocumentClassificationJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the documentation classification jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their names, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDocumentClassificationJobs(
        filter: DocumentClassificationJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDocumentClassificationJobsResponse {
        let input = ListDocumentClassificationJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDocumentClassificationJobs(input, logger: logger)
    }

    /// Gets a list of summaries of the document classifiers that you have created
    @Sendable
    @inlinable
    public func listDocumentClassifierSummaries(_ input: ListDocumentClassifierSummariesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDocumentClassifierSummariesResponse {
        try await self.client.execute(
            operation: "ListDocumentClassifierSummaries", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of summaries of the document classifiers that you have created
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return on each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDocumentClassifierSummaries(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDocumentClassifierSummariesResponse {
        let input = ListDocumentClassifierSummariesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDocumentClassifierSummaries(input, logger: logger)
    }

    /// Gets a list of the document classifiers that you have created.
    @Sendable
    @inlinable
    public func listDocumentClassifiers(_ input: ListDocumentClassifiersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDocumentClassifiersResponse {
        try await self.client.execute(
            operation: "ListDocumentClassifiers", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the document classifiers that you have created.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDocumentClassifiers(
        filter: DocumentClassifierFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDocumentClassifiersResponse {
        let input = ListDocumentClassifiersRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDocumentClassifiers(input, logger: logger)
    }

    /// Gets a list of the dominant language detection jobs that you have submitted.
    @Sendable
    @inlinable
    public func listDominantLanguageDetectionJobs(_ input: ListDominantLanguageDetectionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListDominantLanguageDetectionJobsResponse {
        try await self.client.execute(
            operation: "ListDominantLanguageDetectionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the dominant language detection jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters that jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listDominantLanguageDetectionJobs(
        filter: DominantLanguageDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListDominantLanguageDetectionJobsResponse {
        let input = ListDominantLanguageDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listDominantLanguageDetectionJobs(input, logger: logger)
    }

    /// Gets a list of all existing endpoints that you've created. For information about endpoints, see Managing endpoints.
    @Sendable
    @inlinable
    public func listEndpoints(_ input: ListEndpointsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEndpointsResponse {
        try await self.client.execute(
            operation: "ListEndpoints", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of all existing endpoints that you've created. For information about endpoints, see Managing endpoints.
    ///
    /// Parameters:
    ///   - filter: Filters the endpoints that are returned. You can filter endpoints on their name, model, status, or the date and time that they were created. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEndpoints(
        filter: EndpointFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEndpointsResponse {
        let input = ListEndpointsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEndpoints(input, logger: logger)
    }

    /// Gets a list of the entity detection jobs that you have submitted.
    @Sendable
    @inlinable
    public func listEntitiesDetectionJobs(_ input: ListEntitiesDetectionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEntitiesDetectionJobsResponse {
        try await self.client.execute(
            operation: "ListEntitiesDetectionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the entity detection jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEntitiesDetectionJobs(
        filter: EntitiesDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEntitiesDetectionJobsResponse {
        let input = ListEntitiesDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEntitiesDetectionJobs(input, logger: logger)
    }

    /// Gets a list of summaries for the entity recognizers that you have created.
    @Sendable
    @inlinable
    public func listEntityRecognizerSummaries(_ input: ListEntityRecognizerSummariesRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEntityRecognizerSummariesResponse {
        try await self.client.execute(
            operation: "ListEntityRecognizerSummaries", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of summaries for the entity recognizers that you have created.
    ///
    /// Parameters:
    ///   - maxResults: The maximum number of results to return on each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEntityRecognizerSummaries(
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEntityRecognizerSummariesResponse {
        let input = ListEntityRecognizerSummariesRequest(
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEntityRecognizerSummaries(input, logger: logger)
    }

    /// Gets a list of the properties of all entity recognizers that you created, including recognizers currently in training. Allows you to filter the list of recognizers based on criteria such as status and submission time. This call returns up to 500 entity recognizers in the list, with a default number of 100 recognizers in the list. The results of this list are not in any particular order. Please get the list and sort locally if needed.
    @Sendable
    @inlinable
    public func listEntityRecognizers(_ input: ListEntityRecognizersRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEntityRecognizersResponse {
        try await self.client.execute(
            operation: "ListEntityRecognizers", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the properties of all entity recognizers that you created, including recognizers currently in training. Allows you to filter the list of recognizers based on criteria such as status and submission time. This call returns up to 500 entity recognizers in the list, with a default number of 100 recognizers in the list. The results of this list are not in any particular order. Please get the list and sort locally if needed.
    ///
    /// Parameters:
    ///   - filter: Filters the list of entities returned. You can filter on Status, SubmitTimeBefore, or SubmitTimeAfter. You can only set one filter at a time.
    ///   - maxResults:  The maximum number of results to return on each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEntityRecognizers(
        filter: EntityRecognizerFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEntityRecognizersResponse {
        let input = ListEntityRecognizersRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEntityRecognizers(input, logger: logger)
    }

    /// Gets a list of the events detection jobs that you have submitted.
    @Sendable
    @inlinable
    public func listEventsDetectionJobs(_ input: ListEventsDetectionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListEventsDetectionJobsResponse {
        try await self.client.execute(
            operation: "ListEventsDetectionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the events detection jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listEventsDetectionJobs(
        filter: EventsDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListEventsDetectionJobsResponse {
        let input = ListEventsDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listEventsDetectionJobs(input, logger: logger)
    }

    /// Information about the history of a flywheel iteration. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func listFlywheelIterationHistory(_ input: ListFlywheelIterationHistoryRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFlywheelIterationHistoryResponse {
        try await self.client.execute(
            operation: "ListFlywheelIterationHistory", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Information about the history of a flywheel iteration. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - filter: Filter the flywheel iteration history based on creation time.
    ///   - flywheelArn: The ARN of the flywheel.
    ///   - maxResults: Maximum number of iteration history results to return
    ///   - nextToken: Next token
    ///   - logger: Logger use during operation
    @inlinable
    public func listFlywheelIterationHistory(
        filter: FlywheelIterationFilter? = nil,
        flywheelArn: String,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFlywheelIterationHistoryResponse {
        let input = ListFlywheelIterationHistoryRequest(
            filter: filter, 
            flywheelArn: flywheelArn, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listFlywheelIterationHistory(input, logger: logger)
    }

    /// Gets a list of the flywheels that you have created.
    @Sendable
    @inlinable
    public func listFlywheels(_ input: ListFlywheelsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListFlywheelsResponse {
        try await self.client.execute(
            operation: "ListFlywheels", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the flywheels that you have created.
    ///
    /// Parameters:
    ///   - filter: Filters the flywheels that are returned. You can filter flywheels on their status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: Maximum number of results to return in a response. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listFlywheels(
        filter: FlywheelFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListFlywheelsResponse {
        let input = ListFlywheelsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listFlywheels(input, logger: logger)
    }

    /// Get a list of key phrase detection jobs that you have submitted.
    @Sendable
    @inlinable
    public func listKeyPhrasesDetectionJobs(_ input: ListKeyPhrasesDetectionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListKeyPhrasesDetectionJobsResponse {
        try await self.client.execute(
            operation: "ListKeyPhrasesDetectionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Get a list of key phrase detection jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listKeyPhrasesDetectionJobs(
        filter: KeyPhrasesDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListKeyPhrasesDetectionJobsResponse {
        let input = ListKeyPhrasesDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listKeyPhrasesDetectionJobs(input, logger: logger)
    }

    /// Gets a list of the PII entity detection jobs that you have submitted.
    @Sendable
    @inlinable
    public func listPiiEntitiesDetectionJobs(_ input: ListPiiEntitiesDetectionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListPiiEntitiesDetectionJobsResponse {
        try await self.client.execute(
            operation: "ListPiiEntitiesDetectionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the PII entity detection jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listPiiEntitiesDetectionJobs(
        filter: PiiEntitiesDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListPiiEntitiesDetectionJobsResponse {
        let input = ListPiiEntitiesDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listPiiEntitiesDetectionJobs(input, logger: logger)
    }

    /// Gets a list of sentiment detection jobs that you have submitted.
    @Sendable
    @inlinable
    public func listSentimentDetectionJobs(_ input: ListSentimentDetectionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListSentimentDetectionJobsResponse {
        try await self.client.execute(
            operation: "ListSentimentDetectionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of sentiment detection jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listSentimentDetectionJobs(
        filter: SentimentDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListSentimentDetectionJobsResponse {
        let input = ListSentimentDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listSentimentDetectionJobs(input, logger: logger)
    }

    /// Lists all tags associated with a given Amazon Comprehend resource.
    @Sendable
    @inlinable
    public func listTagsForResource(_ input: ListTagsForResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTagsForResourceResponse {
        try await self.client.execute(
            operation: "ListTagsForResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Lists all tags associated with a given Amazon Comprehend resource.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the given Amazon Comprehend resource you are querying.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTagsForResource(
        resourceArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTagsForResourceResponse {
        let input = ListTagsForResourceRequest(
            resourceArn: resourceArn
        )
        return try await self.listTagsForResource(input, logger: logger)
    }

    /// Gets a list of targeted sentiment detection jobs that you have submitted.
    @Sendable
    @inlinable
    public func listTargetedSentimentDetectionJobs(_ input: ListTargetedSentimentDetectionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTargetedSentimentDetectionJobsResponse {
        try await self.client.execute(
            operation: "ListTargetedSentimentDetectionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of targeted sentiment detection jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTargetedSentimentDetectionJobs(
        filter: TargetedSentimentDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTargetedSentimentDetectionJobsResponse {
        let input = ListTargetedSentimentDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listTargetedSentimentDetectionJobs(input, logger: logger)
    }

    /// Gets a list of the topic detection jobs that you have submitted.
    @Sendable
    @inlinable
    public func listTopicsDetectionJobs(_ input: ListTopicsDetectionJobsRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> ListTopicsDetectionJobsResponse {
        try await self.client.execute(
            operation: "ListTopicsDetectionJobs", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Gets a list of the topic detection jobs that you have submitted.
    ///
    /// Parameters:
    ///   - filter: Filters the jobs that are returned. Jobs can be filtered on their name, status, or the date and time that they were submitted. You can set only one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - nextToken: Identifies the next page of results to return.
    ///   - logger: Logger use during operation
    @inlinable
    public func listTopicsDetectionJobs(
        filter: TopicsDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        nextToken: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> ListTopicsDetectionJobsResponse {
        let input = ListTopicsDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults, 
            nextToken: nextToken
        )
        return try await self.listTopicsDetectionJobs(input, logger: logger)
    }

    /// Attaches a resource-based policy to a custom model. You can use this policy to authorize an entity in another Amazon Web Services account to import the custom model, which replicates it in Amazon Comprehend in their account.
    @Sendable
    @inlinable
    public func putResourcePolicy(_ input: PutResourcePolicyRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> PutResourcePolicyResponse {
        try await self.client.execute(
            operation: "PutResourcePolicy", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Attaches a resource-based policy to a custom model. You can use this policy to authorize an entity in another Amazon Web Services account to import the custom model, which replicates it in Amazon Comprehend in their account.
    ///
    /// Parameters:
    ///   - policyRevisionId: The revision ID that Amazon Comprehend assigned to the policy that you are updating. If you are creating a new policy that has no prior version, don't use this parameter. Amazon Comprehend creates the revision ID for you.
    ///   - resourceArn: The Amazon Resource Name (ARN) of the custom model to attach the policy to.
    ///   - resourcePolicy: The JSON resource-based policy to attach to your custom model. Provide your JSON as a UTF-8 encoded string without line breaks. To provide valid JSON for your policy, enclose the attribute names and values in double quotes. If the JSON body is also enclosed in double quotes, then you must escape the double quotes that are inside the policy:  "{\"attribute\": \"value\", \"attribute\": [\"value\"]}"  To avoid escaping quotes, you can use single quotes to enclose the policy and double quotes to enclose the JSON names and values:  '{"attribute": "value", "attribute": ["value"]}'
    ///   - logger: Logger use during operation
    @inlinable
    public func putResourcePolicy(
        policyRevisionId: String? = nil,
        resourceArn: String,
        resourcePolicy: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> PutResourcePolicyResponse {
        let input = PutResourcePolicyRequest(
            policyRevisionId: policyRevisionId, 
            resourceArn: resourceArn, 
            resourcePolicy: resourcePolicy
        )
        return try await self.putResourcePolicy(input, logger: logger)
    }

    /// Starts an asynchronous document classification job using a custom classification model.  Use the  DescribeDocumentClassificationJob operation to track the progress of the job.
    @Sendable
    @inlinable
    public func startDocumentClassificationJob(_ input: StartDocumentClassificationJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartDocumentClassificationJobResponse {
        try await self.client.execute(
            operation: "StartDocumentClassificationJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous document classification job using a custom classification model.  Use the  DescribeDocumentClassificationJob operation to track the progress of the job.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you do not set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data.
    ///   - documentClassifierArn: The Amazon Resource Name (ARN) of the document classifier to use to process the job.
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel associated with the model to use.
    ///   - inputDataConfig: Specifies the format and location of the input data for the job.
    ///   - jobName: The identifier of the job.
    ///   - outputDataConfig: Specifies where to send the output files.
    ///   - tags: Tags to associate with the document classification job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - volumeKmsKeyId: ID for the Amazon Web Services Key Management Service (KMS) key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig: Configuration parameters for an optional private Virtual Private Cloud (VPC) containing the resources you are using for your document classification job. For more information, see Amazon VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func startDocumentClassificationJob(
        clientRequestToken: String? = StartDocumentClassificationJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        documentClassifierArn: String? = nil,
        flywheelArn: String? = nil,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        outputDataConfig: OutputDataConfig,
        tags: [Tag]? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartDocumentClassificationJobResponse {
        let input = StartDocumentClassificationJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            documentClassifierArn: documentClassifierArn, 
            flywheelArn: flywheelArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.startDocumentClassificationJob(input, logger: logger)
    }

    /// Starts an asynchronous dominant language detection job for a collection of documents. Use the  operation to track the status of a job.
    @Sendable
    @inlinable
    public func startDominantLanguageDetectionJob(_ input: StartDominantLanguageDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartDominantLanguageDetectionJobResponse {
        try await self.client.execute(
            operation: "StartDominantLanguageDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous dominant language detection job for a collection of documents. Use the  operation to track the status of a job.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you do not set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data. For more information, see Role-based permissions.
    ///   - inputDataConfig: Specifies the format and location of the input data for the job.
    ///   - jobName: An identifier for the job.
    ///   - outputDataConfig: Specifies where to send the output files.
    ///   - tags: Tags to associate with the dominant language detection job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - volumeKmsKeyId: ID for the Amazon Web Services Key Management Service (KMS) key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig: Configuration parameters for an optional private Virtual Private Cloud (VPC) containing the resources you are using for your dominant language detection job. For more information, see Amazon VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func startDominantLanguageDetectionJob(
        clientRequestToken: String? = StartDominantLanguageDetectionJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        outputDataConfig: OutputDataConfig,
        tags: [Tag]? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartDominantLanguageDetectionJobResponse {
        let input = StartDominantLanguageDetectionJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.startDominantLanguageDetectionJob(input, logger: logger)
    }

    /// Starts an asynchronous entity detection job for a collection of documents. Use the  operation to track the status of a job. This API can be used for either standard entity detection or custom entity recognition. In order to be used for custom entity recognition, the optional EntityRecognizerArn must be used in order to provide access to the recognizer being used to detect the custom entity.
    @Sendable
    @inlinable
    public func startEntitiesDetectionJob(_ input: StartEntitiesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartEntitiesDetectionJobResponse {
        try await self.client.execute(
            operation: "StartEntitiesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous entity detection job for a collection of documents. Use the  operation to track the status of a job. This API can be used for either standard entity detection or custom entity recognition. In order to be used for custom entity recognition, the optional EntityRecognizerArn must be used in order to provide access to the recognizer being used to detect the custom entity.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data. For more information, see Role-based permissions.
    ///   - entityRecognizerArn: The Amazon Resource Name (ARN) that identifies the specific entity recognizer to be used by the StartEntitiesDetectionJob. This ARN is optional and is only used for a custom entity recognition job.
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel associated with the model to use.
    ///   - inputDataConfig: Specifies the format and location of the input data for the job.
    ///   - jobName: The identifier of the job.
    ///   - languageCode: The language of the input documents. All documents must be in the same language. You can specify any of the languages supported by Amazon Comprehend. If custom entities recognition is used, this parameter is ignored and the language used for training the model is used instead.
    ///   - outputDataConfig: Specifies where to send the output files.
    ///   - tags: Tags to associate with the entities detection job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - volumeKmsKeyId: ID for the Amazon Web Services Key Management Service (KMS) key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig: Configuration parameters for an optional private Virtual Private Cloud (VPC) containing the resources you are using for your entity detection job. For more information, see Amazon VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func startEntitiesDetectionJob(
        clientRequestToken: String? = StartEntitiesDetectionJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        entityRecognizerArn: String? = nil,
        flywheelArn: String? = nil,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        languageCode: LanguageCode,
        outputDataConfig: OutputDataConfig,
        tags: [Tag]? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartEntitiesDetectionJobResponse {
        let input = StartEntitiesDetectionJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            entityRecognizerArn: entityRecognizerArn, 
            flywheelArn: flywheelArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            languageCode: languageCode, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.startEntitiesDetectionJob(input, logger: logger)
    }

    /// Starts an asynchronous event detection job for a collection of documents.
    @Sendable
    @inlinable
    public func startEventsDetectionJob(_ input: StartEventsDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartEventsDetectionJobResponse {
        try await self.client.execute(
            operation: "StartEventsDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous event detection job for a collection of documents.
    ///
    /// Parameters:
    ///   - clientRequestToken: An unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data.
    ///   - inputDataConfig: Specifies the format and location of the input data for the job.
    ///   - jobName: The identifier of the events detection job.
    ///   - languageCode: The language code of the input documents.
    ///   - outputDataConfig: Specifies where to send the output files.
    ///   - tags: Tags to associate with the events detection job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - targetEventTypes: The types of events to detect in the input documents.
    ///   - logger: Logger use during operation
    @inlinable
    public func startEventsDetectionJob(
        clientRequestToken: String? = StartEventsDetectionJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        languageCode: LanguageCode,
        outputDataConfig: OutputDataConfig,
        tags: [Tag]? = nil,
        targetEventTypes: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartEventsDetectionJobResponse {
        let input = StartEventsDetectionJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            languageCode: languageCode, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            targetEventTypes: targetEventTypes
        )
        return try await self.startEventsDetectionJob(input, logger: logger)
    }

    /// Start the flywheel iteration.This operation uses any new datasets to train a new model version. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    @Sendable
    @inlinable
    public func startFlywheelIteration(_ input: StartFlywheelIterationRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartFlywheelIterationResponse {
        try await self.client.execute(
            operation: "StartFlywheelIteration", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Start the flywheel iteration.This operation uses any new datasets to train a new model version. For more information about flywheels, see  Flywheel overview in the Amazon Comprehend Developer Guide.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - flywheelArn: The ARN of the flywheel.
    ///   - logger: Logger use during operation
    @inlinable
    public func startFlywheelIteration(
        clientRequestToken: String? = nil,
        flywheelArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartFlywheelIterationResponse {
        let input = StartFlywheelIterationRequest(
            clientRequestToken: clientRequestToken, 
            flywheelArn: flywheelArn
        )
        return try await self.startFlywheelIteration(input, logger: logger)
    }

    /// Starts an asynchronous key phrase detection job for a collection of documents. Use the operation to track the status of a job.
    @Sendable
    @inlinable
    public func startKeyPhrasesDetectionJob(_ input: StartKeyPhrasesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartKeyPhrasesDetectionJobResponse {
        try await self.client.execute(
            operation: "StartKeyPhrasesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous key phrase detection job for a collection of documents. Use the operation to track the status of a job.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data. For more information, see Role-based permissions.
    ///   - inputDataConfig: Specifies the format and location of the input data for the job.
    ///   - jobName: The identifier of the job.
    ///   - languageCode: The language of the input documents. You can specify any of the primary languages supported by Amazon Comprehend. All documents must be in the same language.
    ///   - outputDataConfig: Specifies where to send the output files.
    ///   - tags: Tags to associate with the key phrases detection job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - volumeKmsKeyId: ID for the Amazon Web Services Key Management Service (KMS) key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig:  Configuration parameters for an optional private Virtual Private Cloud (VPC) containing the resources you are using for your key phrases detection job. For more information, see Amazon VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func startKeyPhrasesDetectionJob(
        clientRequestToken: String? = StartKeyPhrasesDetectionJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        languageCode: LanguageCode,
        outputDataConfig: OutputDataConfig,
        tags: [Tag]? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartKeyPhrasesDetectionJobResponse {
        let input = StartKeyPhrasesDetectionJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            languageCode: languageCode, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.startKeyPhrasesDetectionJob(input, logger: logger)
    }

    /// Starts an asynchronous PII entity detection job for a collection of documents.
    @Sendable
    @inlinable
    public func startPiiEntitiesDetectionJob(_ input: StartPiiEntitiesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartPiiEntitiesDetectionJobResponse {
        try await self.client.execute(
            operation: "StartPiiEntitiesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous PII entity detection job for a collection of documents.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data.
    ///   - inputDataConfig: The input properties for a PII entities detection job.
    ///   - jobName: The identifier of the job.
    ///   - languageCode: The language of the input documents.  Enter the language code for English (en) or Spanish (es).
    ///   - mode: Specifies whether the output provides the locations (offsets) of PII entities or a file in which PII entities are redacted.
    ///   - outputDataConfig: Provides conﬁguration parameters for the output of PII entity detection jobs.
    ///   - redactionConfig: Provides configuration parameters for PII entity redaction. This parameter is required if you set the Mode parameter to ONLY_REDACTION. In that case, you must provide a RedactionConfig definition that includes the PiiEntityTypes parameter.
    ///   - tags: Tags to associate with the PII entities detection job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - logger: Logger use during operation
    @inlinable
    public func startPiiEntitiesDetectionJob(
        clientRequestToken: String? = StartPiiEntitiesDetectionJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        languageCode: LanguageCode,
        mode: PiiEntitiesDetectionMode,
        outputDataConfig: OutputDataConfig,
        redactionConfig: RedactionConfig? = nil,
        tags: [Tag]? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartPiiEntitiesDetectionJobResponse {
        let input = StartPiiEntitiesDetectionJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            languageCode: languageCode, 
            mode: mode, 
            outputDataConfig: outputDataConfig, 
            redactionConfig: redactionConfig, 
            tags: tags
        )
        return try await self.startPiiEntitiesDetectionJob(input, logger: logger)
    }

    /// Starts an asynchronous sentiment detection job for a collection of documents. Use the operation to track the status of a job.
    @Sendable
    @inlinable
    public func startSentimentDetectionJob(_ input: StartSentimentDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartSentimentDetectionJobResponse {
        try await self.client.execute(
            operation: "StartSentimentDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous sentiment detection job for a collection of documents. Use the operation to track the status of a job.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data. For more information, see Role-based permissions.
    ///   - inputDataConfig: Specifies the format and location of the input data for the job.
    ///   - jobName: The identifier of the job.
    ///   - languageCode: The language of the input documents. You can specify any of the primary languages supported by Amazon Comprehend. All documents must be in the same language.
    ///   - outputDataConfig: Specifies where to send the output files.
    ///   - tags: Tags to associate with the sentiment detection job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - volumeKmsKeyId: ID for the Amazon Web Services Key Management Service (KMS) key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig: Configuration parameters for an optional private Virtual Private Cloud (VPC) containing the resources you are using for your sentiment detection job. For more information, see Amazon VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func startSentimentDetectionJob(
        clientRequestToken: String? = StartSentimentDetectionJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        languageCode: LanguageCode,
        outputDataConfig: OutputDataConfig,
        tags: [Tag]? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartSentimentDetectionJobResponse {
        let input = StartSentimentDetectionJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            languageCode: languageCode, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.startSentimentDetectionJob(input, logger: logger)
    }

    /// Starts an asynchronous targeted sentiment detection job for a collection of documents. Use the DescribeTargetedSentimentDetectionJob operation to track the status of a job.
    @Sendable
    @inlinable
    public func startTargetedSentimentDetectionJob(_ input: StartTargetedSentimentDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartTargetedSentimentDetectionJobResponse {
        try await self.client.execute(
            operation: "StartTargetedSentimentDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous targeted sentiment detection job for a collection of documents. Use the DescribeTargetedSentimentDetectionJob operation to track the status of a job.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you don't set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data. For more information, see Role-based permissions.
    ///   - inputDataConfig: 
    ///   - jobName: The identifier of the job.
    ///   - languageCode: The language of the input documents. Currently, English is the only supported language.
    ///   - outputDataConfig: Specifies where to send the output files.
    ///   - tags: Tags to associate with the targeted sentiment detection job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - volumeKmsKeyId: ID for the KMS key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig: 
    ///   - logger: Logger use during operation
    @inlinable
    public func startTargetedSentimentDetectionJob(
        clientRequestToken: String? = StartTargetedSentimentDetectionJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        languageCode: LanguageCode,
        outputDataConfig: OutputDataConfig,
        tags: [Tag]? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartTargetedSentimentDetectionJobResponse {
        let input = StartTargetedSentimentDetectionJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            languageCode: languageCode, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.startTargetedSentimentDetectionJob(input, logger: logger)
    }

    /// Starts an asynchronous topic detection job. Use the DescribeTopicDetectionJob operation to track the status of a job.
    @Sendable
    @inlinable
    public func startTopicsDetectionJob(_ input: StartTopicsDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StartTopicsDetectionJobResponse {
        try await self.client.execute(
            operation: "StartTopicsDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Starts an asynchronous topic detection job. Use the DescribeTopicDetectionJob operation to track the status of a job.
    ///
    /// Parameters:
    ///   - clientRequestToken: A unique identifier for the request. If you do not set the client request token, Amazon Comprehend generates one.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend read access to your input data. For more information, see Role-based permissions.
    ///   - inputDataConfig: Specifies the format and location of the input data for the job.
    ///   - jobName: The identifier of the job.
    ///   - numberOfTopics: The number of topics to detect.
    ///   - outputDataConfig: Specifies where to send the output files. The output is a compressed archive with two files, topic-terms.csv that lists the terms associated with each topic, and doc-topics.csv that lists the documents associated with each topic
    ///   - tags: Tags to associate with the topics detection job. A tag is a key-value pair that adds metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///   - volumeKmsKeyId: ID for the Amazon Web Services Key Management Service (KMS) key that Amazon Comprehend uses to encrypt data on the storage volume attached to the ML compute instance(s) that process the analysis job. The VolumeKmsKeyId can be either of the following formats:   KMS Key ID: "1234abcd-12ab-34cd-56ef-1234567890ab"    Amazon Resource Name (ARN) of a KMS Key: "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab"
    ///   - vpcConfig: Configuration parameters for an optional private Virtual Private Cloud (VPC) containing the resources you are using for your topic detection job. For more information, see Amazon VPC.
    ///   - logger: Logger use during operation
    @inlinable
    public func startTopicsDetectionJob(
        clientRequestToken: String? = StartTopicsDetectionJobRequest.idempotencyToken(),
        dataAccessRoleArn: String,
        inputDataConfig: InputDataConfig,
        jobName: String? = nil,
        numberOfTopics: Int? = nil,
        outputDataConfig: OutputDataConfig,
        tags: [Tag]? = nil,
        volumeKmsKeyId: String? = nil,
        vpcConfig: VpcConfig? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StartTopicsDetectionJobResponse {
        let input = StartTopicsDetectionJobRequest(
            clientRequestToken: clientRequestToken, 
            dataAccessRoleArn: dataAccessRoleArn, 
            inputDataConfig: inputDataConfig, 
            jobName: jobName, 
            numberOfTopics: numberOfTopics, 
            outputDataConfig: outputDataConfig, 
            tags: tags, 
            volumeKmsKeyId: volumeKmsKeyId, 
            vpcConfig: vpcConfig
        )
        return try await self.startTopicsDetectionJob(input, logger: logger)
    }

    /// Stops a dominant language detection job in progress. If the job state is IN_PROGRESS the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    @Sendable
    @inlinable
    public func stopDominantLanguageDetectionJob(_ input: StopDominantLanguageDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopDominantLanguageDetectionJobResponse {
        try await self.client.execute(
            operation: "StopDominantLanguageDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a dominant language detection job in progress. If the job state is IN_PROGRESS the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    ///
    /// Parameters:
    ///   - jobId: The identifier of the dominant language detection job to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopDominantLanguageDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopDominantLanguageDetectionJobResponse {
        let input = StopDominantLanguageDetectionJobRequest(
            jobId: jobId
        )
        return try await self.stopDominantLanguageDetectionJob(input, logger: logger)
    }

    /// Stops an entities detection job in progress. If the job state is IN_PROGRESS the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    @Sendable
    @inlinable
    public func stopEntitiesDetectionJob(_ input: StopEntitiesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopEntitiesDetectionJobResponse {
        try await self.client.execute(
            operation: "StopEntitiesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops an entities detection job in progress. If the job state is IN_PROGRESS the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    ///
    /// Parameters:
    ///   - jobId: The identifier of the entities detection job to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopEntitiesDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopEntitiesDetectionJobResponse {
        let input = StopEntitiesDetectionJobRequest(
            jobId: jobId
        )
        return try await self.stopEntitiesDetectionJob(input, logger: logger)
    }

    /// Stops an events detection job in progress.
    @Sendable
    @inlinable
    public func stopEventsDetectionJob(_ input: StopEventsDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopEventsDetectionJobResponse {
        try await self.client.execute(
            operation: "StopEventsDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops an events detection job in progress.
    ///
    /// Parameters:
    ///   - jobId: The identifier of the events detection job to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopEventsDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopEventsDetectionJobResponse {
        let input = StopEventsDetectionJobRequest(
            jobId: jobId
        )
        return try await self.stopEventsDetectionJob(input, logger: logger)
    }

    /// Stops a key phrases detection job in progress. If the job state is IN_PROGRESS the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    @Sendable
    @inlinable
    public func stopKeyPhrasesDetectionJob(_ input: StopKeyPhrasesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopKeyPhrasesDetectionJobResponse {
        try await self.client.execute(
            operation: "StopKeyPhrasesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a key phrases detection job in progress. If the job state is IN_PROGRESS the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    ///
    /// Parameters:
    ///   - jobId: The identifier of the key phrases detection job to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopKeyPhrasesDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopKeyPhrasesDetectionJobResponse {
        let input = StopKeyPhrasesDetectionJobRequest(
            jobId: jobId
        )
        return try await self.stopKeyPhrasesDetectionJob(input, logger: logger)
    }

    /// Stops a PII entities detection job in progress.
    @Sendable
    @inlinable
    public func stopPiiEntitiesDetectionJob(_ input: StopPiiEntitiesDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopPiiEntitiesDetectionJobResponse {
        try await self.client.execute(
            operation: "StopPiiEntitiesDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a PII entities detection job in progress.
    ///
    /// Parameters:
    ///   - jobId: The identifier of the PII entities detection job to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopPiiEntitiesDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopPiiEntitiesDetectionJobResponse {
        let input = StopPiiEntitiesDetectionJobRequest(
            jobId: jobId
        )
        return try await self.stopPiiEntitiesDetectionJob(input, logger: logger)
    }

    /// Stops a sentiment detection job in progress. If the job state is IN_PROGRESS, the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is be stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    @Sendable
    @inlinable
    public func stopSentimentDetectionJob(_ input: StopSentimentDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopSentimentDetectionJobResponse {
        try await self.client.execute(
            operation: "StopSentimentDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a sentiment detection job in progress. If the job state is IN_PROGRESS, the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is be stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    ///
    /// Parameters:
    ///   - jobId: The identifier of the sentiment detection job to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopSentimentDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopSentimentDetectionJobResponse {
        let input = StopSentimentDetectionJobRequest(
            jobId: jobId
        )
        return try await self.stopSentimentDetectionJob(input, logger: logger)
    }

    /// Stops a targeted sentiment detection job in progress. If the job state is IN_PROGRESS, the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is be stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    @Sendable
    @inlinable
    public func stopTargetedSentimentDetectionJob(_ input: StopTargetedSentimentDetectionJobRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopTargetedSentimentDetectionJobResponse {
        try await self.client.execute(
            operation: "StopTargetedSentimentDetectionJob", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a targeted sentiment detection job in progress. If the job state is IN_PROGRESS, the job is marked for termination and put into the STOP_REQUESTED state. If the job completes before it can be stopped, it is put into the COMPLETED state; otherwise the job is be stopped and put into the STOPPED state. If the job is in the COMPLETED or FAILED state when you call the StopDominantLanguageDetectionJob operation, the operation returns a 400 Internal Request Exception.  When a job is stopped, any documents already processed are written to the output location.
    ///
    /// Parameters:
    ///   - jobId: The identifier of the targeted sentiment detection job to stop.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopTargetedSentimentDetectionJob(
        jobId: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopTargetedSentimentDetectionJobResponse {
        let input = StopTargetedSentimentDetectionJobRequest(
            jobId: jobId
        )
        return try await self.stopTargetedSentimentDetectionJob(input, logger: logger)
    }

    /// Stops a document classifier training job while in progress. If the training job state is TRAINING, the job is marked for termination and put into the STOP_REQUESTED state. If the training job completes before it can be stopped, it is put into the TRAINED; otherwise the training job is stopped and put into the STOPPED state and the service sends back an HTTP 200 response with an empty HTTP body.
    @Sendable
    @inlinable
    public func stopTrainingDocumentClassifier(_ input: StopTrainingDocumentClassifierRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopTrainingDocumentClassifierResponse {
        try await self.client.execute(
            operation: "StopTrainingDocumentClassifier", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops a document classifier training job while in progress. If the training job state is TRAINING, the job is marked for termination and put into the STOP_REQUESTED state. If the training job completes before it can be stopped, it is put into the TRAINED; otherwise the training job is stopped and put into the STOPPED state and the service sends back an HTTP 200 response with an empty HTTP body.
    ///
    /// Parameters:
    ///   - documentClassifierArn: The Amazon Resource Name (ARN) that identifies the document classifier currently being trained.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopTrainingDocumentClassifier(
        documentClassifierArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopTrainingDocumentClassifierResponse {
        let input = StopTrainingDocumentClassifierRequest(
            documentClassifierArn: documentClassifierArn
        )
        return try await self.stopTrainingDocumentClassifier(input, logger: logger)
    }

    /// Stops an entity recognizer training job while in progress. If the training job state is TRAINING, the job is marked for termination and put into the STOP_REQUESTED state. If the training job completes before it can be stopped, it is put into the TRAINED; otherwise the training job is stopped and putted into the STOPPED state and the service sends back an HTTP 200 response with an empty HTTP body.
    @Sendable
    @inlinable
    public func stopTrainingEntityRecognizer(_ input: StopTrainingEntityRecognizerRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> StopTrainingEntityRecognizerResponse {
        try await self.client.execute(
            operation: "StopTrainingEntityRecognizer", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Stops an entity recognizer training job while in progress. If the training job state is TRAINING, the job is marked for termination and put into the STOP_REQUESTED state. If the training job completes before it can be stopped, it is put into the TRAINED; otherwise the training job is stopped and putted into the STOPPED state and the service sends back an HTTP 200 response with an empty HTTP body.
    ///
    /// Parameters:
    ///   - entityRecognizerArn: The Amazon Resource Name (ARN) that identifies the entity recognizer currently being trained.
    ///   - logger: Logger use during operation
    @inlinable
    public func stopTrainingEntityRecognizer(
        entityRecognizerArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> StopTrainingEntityRecognizerResponse {
        let input = StopTrainingEntityRecognizerRequest(
            entityRecognizerArn: entityRecognizerArn
        )
        return try await self.stopTrainingEntityRecognizer(input, logger: logger)
    }

    /// Associates a specific tag with an Amazon Comprehend resource. A tag is a key-value pair that adds as a metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    @Sendable
    @inlinable
    public func tagResource(_ input: TagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> TagResourceResponse {
        try await self.client.execute(
            operation: "TagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Associates a specific tag with an Amazon Comprehend resource. A tag is a key-value pair that adds as a metadata to a resource used by Amazon Comprehend. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department.
    ///
    /// Parameters:
    ///   - resourceArn: The Amazon Resource Name (ARN) of the given Amazon Comprehend resource to which you want to associate the tags.
    ///   - tags: Tags being associated with a specific Amazon Comprehend resource. There can be a maximum of 50 tags (both existing and pending) associated with a specific resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func tagResource(
        resourceArn: String,
        tags: [Tag],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> TagResourceResponse {
        let input = TagResourceRequest(
            resourceArn: resourceArn, 
            tags: tags
        )
        return try await self.tagResource(input, logger: logger)
    }

    /// Removes a specific tag associated with an Amazon Comprehend resource.
    @Sendable
    @inlinable
    public func untagResource(_ input: UntagResourceRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UntagResourceResponse {
        try await self.client.execute(
            operation: "UntagResource", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Removes a specific tag associated with an Amazon Comprehend resource.
    ///
    /// Parameters:
    ///   - resourceArn:  The Amazon Resource Name (ARN) of the given Amazon Comprehend resource from which you want to remove the tags.
    ///   - tagKeys: The initial part of a key-value pair that forms a tag being removed from a given resource. For example, a tag with "Sales" as the key might be added to a resource to indicate its use by the sales department. Keys must be unique and cannot be duplicated for a particular resource.
    ///   - logger: Logger use during operation
    @inlinable
    public func untagResource(
        resourceArn: String,
        tagKeys: [String],
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UntagResourceResponse {
        let input = UntagResourceRequest(
            resourceArn: resourceArn, 
            tagKeys: tagKeys
        )
        return try await self.untagResource(input, logger: logger)
    }

    /// Updates information about the specified endpoint. For information about endpoints, see Managing endpoints.
    @Sendable
    @inlinable
    public func updateEndpoint(_ input: UpdateEndpointRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateEndpointResponse {
        try await self.client.execute(
            operation: "UpdateEndpoint", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Updates information about the specified endpoint. For information about endpoints, see Managing endpoints.
    ///
    /// Parameters:
    ///   - desiredDataAccessRoleArn: Data access role ARN to use in case the new model is encrypted with a customer CMK.
    ///   - desiredInferenceUnits:  The desired number of inference units to be used by the model using this endpoint.  Each inference unit represents of a throughput of 100 characters per second.
    ///   - desiredModelArn: The ARN of the new model to use when updating an existing endpoint.
    ///   - endpointArn: The Amazon Resource Number (ARN) of the endpoint being updated.
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel
    ///   - logger: Logger use during operation
    @inlinable
    public func updateEndpoint(
        desiredDataAccessRoleArn: String? = nil,
        desiredInferenceUnits: Int? = nil,
        desiredModelArn: String? = nil,
        endpointArn: String,
        flywheelArn: String? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateEndpointResponse {
        let input = UpdateEndpointRequest(
            desiredDataAccessRoleArn: desiredDataAccessRoleArn, 
            desiredInferenceUnits: desiredInferenceUnits, 
            desiredModelArn: desiredModelArn, 
            endpointArn: endpointArn, 
            flywheelArn: flywheelArn
        )
        return try await self.updateEndpoint(input, logger: logger)
    }

    /// Update the configuration information for an existing flywheel.
    @Sendable
    @inlinable
    public func updateFlywheel(_ input: UpdateFlywheelRequest, logger: Logger = AWSClient.loggingDisabled) async throws -> UpdateFlywheelResponse {
        try await self.client.execute(
            operation: "UpdateFlywheel", 
            path: "/", 
            httpMethod: .POST, 
            serviceConfig: self.config, 
            input: input, 
            logger: logger
        )
    }
    /// Update the configuration information for an existing flywheel.
    ///
    /// Parameters:
    ///   - activeModelArn: The Amazon Resource Number (ARN) of the active model version.
    ///   - dataAccessRoleArn: The Amazon Resource Name (ARN) of the IAM role that grants Amazon Comprehend permission to access the flywheel data.
    ///   - dataSecurityConfig: Flywheel data security configuration.
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel to update.
    ///   - logger: Logger use during operation
    @inlinable
    public func updateFlywheel(
        activeModelArn: String? = nil,
        dataAccessRoleArn: String? = nil,
        dataSecurityConfig: UpdateDataSecurityConfig? = nil,
        flywheelArn: String,
        logger: Logger = AWSClient.loggingDisabled        
    ) async throws -> UpdateFlywheelResponse {
        let input = UpdateFlywheelRequest(
            activeModelArn: activeModelArn, 
            dataAccessRoleArn: dataAccessRoleArn, 
            dataSecurityConfig: dataSecurityConfig, 
            flywheelArn: flywheelArn
        )
        return try await self.updateFlywheel(input, logger: logger)
    }
}

extension Comprehend {
    /// Initializer required by `AWSService.with(middlewares:timeout:byteBufferAllocator:options)`. You are not able to use this initializer directly as there are not public
    /// initializers for `AWSServiceConfig.Patch`. Please use `AWSService.with(middlewares:timeout:byteBufferAllocator:options)` instead.
    public init(from: Comprehend, patch: AWSServiceConfig.Patch) {
        self.client = from.client
        self.config = from.config.with(patch: patch)
    }
}

// MARK: Paginators

@available(macOS 10.15, iOS 13.0, tvOS 13.0, watchOS 6.0, *)
extension Comprehend {
    /// Return PaginatorSequence for operation ``listDatasets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetsPaginator(
        _ input: ListDatasetsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDatasetsRequest, ListDatasetsResponse> {
        return .init(
            input: input,
            command: self.listDatasets,
            inputKey: \ListDatasetsRequest.nextToken,
            outputKey: \ListDatasetsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDatasets(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the datasets to be returned in the response.
    ///   - flywheelArn: The Amazon Resource Number (ARN) of the flywheel.
    ///   - maxResults: Maximum number of results to return in a response. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDatasetsPaginator(
        filter: DatasetFilter? = nil,
        flywheelArn: String? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDatasetsRequest, ListDatasetsResponse> {
        let input = ListDatasetsRequest(
            filter: filter, 
            flywheelArn: flywheelArn, 
            maxResults: maxResults
        )
        return self.listDatasetsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDocumentClassificationJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentClassificationJobsPaginator(
        _ input: ListDocumentClassificationJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDocumentClassificationJobsRequest, ListDocumentClassificationJobsResponse> {
        return .init(
            input: input,
            command: self.listDocumentClassificationJobs,
            inputKey: \ListDocumentClassificationJobsRequest.nextToken,
            outputKey: \ListDocumentClassificationJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDocumentClassificationJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their names, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentClassificationJobsPaginator(
        filter: DocumentClassificationJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDocumentClassificationJobsRequest, ListDocumentClassificationJobsResponse> {
        let input = ListDocumentClassificationJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listDocumentClassificationJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDocumentClassifierSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentClassifierSummariesPaginator(
        _ input: ListDocumentClassifierSummariesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDocumentClassifierSummariesRequest, ListDocumentClassifierSummariesResponse> {
        return .init(
            input: input,
            command: self.listDocumentClassifierSummaries,
            inputKey: \ListDocumentClassifierSummariesRequest.nextToken,
            outputKey: \ListDocumentClassifierSummariesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDocumentClassifierSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return on each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentClassifierSummariesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDocumentClassifierSummariesRequest, ListDocumentClassifierSummariesResponse> {
        let input = ListDocumentClassifierSummariesRequest(
            maxResults: maxResults
        )
        return self.listDocumentClassifierSummariesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDocumentClassifiers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentClassifiersPaginator(
        _ input: ListDocumentClassifiersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDocumentClassifiersRequest, ListDocumentClassifiersResponse> {
        return .init(
            input: input,
            command: self.listDocumentClassifiers,
            inputKey: \ListDocumentClassifiersRequest.nextToken,
            outputKey: \ListDocumentClassifiersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDocumentClassifiers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDocumentClassifiersPaginator(
        filter: DocumentClassifierFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDocumentClassifiersRequest, ListDocumentClassifiersResponse> {
        let input = ListDocumentClassifiersRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listDocumentClassifiersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listDominantLanguageDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listDominantLanguageDetectionJobsPaginator(
        _ input: ListDominantLanguageDetectionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListDominantLanguageDetectionJobsRequest, ListDominantLanguageDetectionJobsResponse> {
        return .init(
            input: input,
            command: self.listDominantLanguageDetectionJobs,
            inputKey: \ListDominantLanguageDetectionJobsRequest.nextToken,
            outputKey: \ListDominantLanguageDetectionJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listDominantLanguageDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters that jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listDominantLanguageDetectionJobsPaginator(
        filter: DominantLanguageDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListDominantLanguageDetectionJobsRequest, ListDominantLanguageDetectionJobsResponse> {
        let input = ListDominantLanguageDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listDominantLanguageDetectionJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEndpoints(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEndpointsPaginator(
        _ input: ListEndpointsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEndpointsRequest, ListEndpointsResponse> {
        return .init(
            input: input,
            command: self.listEndpoints,
            inputKey: \ListEndpointsRequest.nextToken,
            outputKey: \ListEndpointsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEndpoints(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the endpoints that are returned. You can filter endpoints on their name, model, status, or the date and time that they were created. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEndpointsPaginator(
        filter: EndpointFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEndpointsRequest, ListEndpointsResponse> {
        let input = ListEndpointsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listEndpointsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEntitiesDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEntitiesDetectionJobsPaginator(
        _ input: ListEntitiesDetectionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEntitiesDetectionJobsRequest, ListEntitiesDetectionJobsResponse> {
        return .init(
            input: input,
            command: self.listEntitiesDetectionJobs,
            inputKey: \ListEntitiesDetectionJobsRequest.nextToken,
            outputKey: \ListEntitiesDetectionJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEntitiesDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEntitiesDetectionJobsPaginator(
        filter: EntitiesDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEntitiesDetectionJobsRequest, ListEntitiesDetectionJobsResponse> {
        let input = ListEntitiesDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listEntitiesDetectionJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEntityRecognizerSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEntityRecognizerSummariesPaginator(
        _ input: ListEntityRecognizerSummariesRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEntityRecognizerSummariesRequest, ListEntityRecognizerSummariesResponse> {
        return .init(
            input: input,
            command: self.listEntityRecognizerSummaries,
            inputKey: \ListEntityRecognizerSummariesRequest.nextToken,
            outputKey: \ListEntityRecognizerSummariesResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEntityRecognizerSummaries(_:logger:)``.
    ///
    /// - Parameters:
    ///   - maxResults: The maximum number of results to return on each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEntityRecognizerSummariesPaginator(
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEntityRecognizerSummariesRequest, ListEntityRecognizerSummariesResponse> {
        let input = ListEntityRecognizerSummariesRequest(
            maxResults: maxResults
        )
        return self.listEntityRecognizerSummariesPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEntityRecognizers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEntityRecognizersPaginator(
        _ input: ListEntityRecognizersRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEntityRecognizersRequest, ListEntityRecognizersResponse> {
        return .init(
            input: input,
            command: self.listEntityRecognizers,
            inputKey: \ListEntityRecognizersRequest.nextToken,
            outputKey: \ListEntityRecognizersResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEntityRecognizers(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the list of entities returned. You can filter on Status, SubmitTimeBefore, or SubmitTimeAfter. You can only set one filter at a time.
    ///   - maxResults:  The maximum number of results to return on each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEntityRecognizersPaginator(
        filter: EntityRecognizerFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEntityRecognizersRequest, ListEntityRecognizersResponse> {
        let input = ListEntityRecognizersRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listEntityRecognizersPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listEventsDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventsDetectionJobsPaginator(
        _ input: ListEventsDetectionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListEventsDetectionJobsRequest, ListEventsDetectionJobsResponse> {
        return .init(
            input: input,
            command: self.listEventsDetectionJobs,
            inputKey: \ListEventsDetectionJobsRequest.nextToken,
            outputKey: \ListEventsDetectionJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listEventsDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page.
    ///   - logger: Logger used for logging
    @inlinable
    public func listEventsDetectionJobsPaginator(
        filter: EventsDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListEventsDetectionJobsRequest, ListEventsDetectionJobsResponse> {
        let input = ListEventsDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listEventsDetectionJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFlywheelIterationHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFlywheelIterationHistoryPaginator(
        _ input: ListFlywheelIterationHistoryRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFlywheelIterationHistoryRequest, ListFlywheelIterationHistoryResponse> {
        return .init(
            input: input,
            command: self.listFlywheelIterationHistory,
            inputKey: \ListFlywheelIterationHistoryRequest.nextToken,
            outputKey: \ListFlywheelIterationHistoryResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFlywheelIterationHistory(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filter the flywheel iteration history based on creation time.
    ///   - flywheelArn: The ARN of the flywheel.
    ///   - maxResults: Maximum number of iteration history results to return
    ///   - logger: Logger used for logging
    @inlinable
    public func listFlywheelIterationHistoryPaginator(
        filter: FlywheelIterationFilter? = nil,
        flywheelArn: String,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFlywheelIterationHistoryRequest, ListFlywheelIterationHistoryResponse> {
        let input = ListFlywheelIterationHistoryRequest(
            filter: filter, 
            flywheelArn: flywheelArn, 
            maxResults: maxResults
        )
        return self.listFlywheelIterationHistoryPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listFlywheels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listFlywheelsPaginator(
        _ input: ListFlywheelsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListFlywheelsRequest, ListFlywheelsResponse> {
        return .init(
            input: input,
            command: self.listFlywheels,
            inputKey: \ListFlywheelsRequest.nextToken,
            outputKey: \ListFlywheelsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listFlywheels(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the flywheels that are returned. You can filter flywheels on their status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: Maximum number of results to return in a response. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listFlywheelsPaginator(
        filter: FlywheelFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListFlywheelsRequest, ListFlywheelsResponse> {
        let input = ListFlywheelsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listFlywheelsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listKeyPhrasesDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listKeyPhrasesDetectionJobsPaginator(
        _ input: ListKeyPhrasesDetectionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListKeyPhrasesDetectionJobsRequest, ListKeyPhrasesDetectionJobsResponse> {
        return .init(
            input: input,
            command: self.listKeyPhrasesDetectionJobs,
            inputKey: \ListKeyPhrasesDetectionJobsRequest.nextToken,
            outputKey: \ListKeyPhrasesDetectionJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listKeyPhrasesDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listKeyPhrasesDetectionJobsPaginator(
        filter: KeyPhrasesDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListKeyPhrasesDetectionJobsRequest, ListKeyPhrasesDetectionJobsResponse> {
        let input = ListKeyPhrasesDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listKeyPhrasesDetectionJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listPiiEntitiesDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listPiiEntitiesDetectionJobsPaginator(
        _ input: ListPiiEntitiesDetectionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListPiiEntitiesDetectionJobsRequest, ListPiiEntitiesDetectionJobsResponse> {
        return .init(
            input: input,
            command: self.listPiiEntitiesDetectionJobs,
            inputKey: \ListPiiEntitiesDetectionJobsRequest.nextToken,
            outputKey: \ListPiiEntitiesDetectionJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listPiiEntitiesDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page.
    ///   - logger: Logger used for logging
    @inlinable
    public func listPiiEntitiesDetectionJobsPaginator(
        filter: PiiEntitiesDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListPiiEntitiesDetectionJobsRequest, ListPiiEntitiesDetectionJobsResponse> {
        let input = ListPiiEntitiesDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listPiiEntitiesDetectionJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listSentimentDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listSentimentDetectionJobsPaginator(
        _ input: ListSentimentDetectionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListSentimentDetectionJobsRequest, ListSentimentDetectionJobsResponse> {
        return .init(
            input: input,
            command: self.listSentimentDetectionJobs,
            inputKey: \ListSentimentDetectionJobsRequest.nextToken,
            outputKey: \ListSentimentDetectionJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listSentimentDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listSentimentDetectionJobsPaginator(
        filter: SentimentDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListSentimentDetectionJobsRequest, ListSentimentDetectionJobsResponse> {
        let input = ListSentimentDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listSentimentDetectionJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTargetedSentimentDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTargetedSentimentDetectionJobsPaginator(
        _ input: ListTargetedSentimentDetectionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTargetedSentimentDetectionJobsRequest, ListTargetedSentimentDetectionJobsResponse> {
        return .init(
            input: input,
            command: self.listTargetedSentimentDetectionJobs,
            inputKey: \ListTargetedSentimentDetectionJobsRequest.nextToken,
            outputKey: \ListTargetedSentimentDetectionJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTargetedSentimentDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. You can filter jobs on their name, status, or the date and time that they were submitted. You can only set one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTargetedSentimentDetectionJobsPaginator(
        filter: TargetedSentimentDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTargetedSentimentDetectionJobsRequest, ListTargetedSentimentDetectionJobsResponse> {
        let input = ListTargetedSentimentDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listTargetedSentimentDetectionJobsPaginator(input, logger: logger)
    }

    /// Return PaginatorSequence for operation ``listTopicsDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - input: Input for operation
    ///   - logger: Logger used for logging
    @inlinable
    public func listTopicsDetectionJobsPaginator(
        _ input: ListTopicsDetectionJobsRequest,
        logger: Logger = AWSClient.loggingDisabled
    ) -> AWSClient.PaginatorSequence<ListTopicsDetectionJobsRequest, ListTopicsDetectionJobsResponse> {
        return .init(
            input: input,
            command: self.listTopicsDetectionJobs,
            inputKey: \ListTopicsDetectionJobsRequest.nextToken,
            outputKey: \ListTopicsDetectionJobsResponse.nextToken,
            logger: logger
        )
    }
    /// Return PaginatorSequence for operation ``listTopicsDetectionJobs(_:logger:)``.
    ///
    /// - Parameters:
    ///   - filter: Filters the jobs that are returned. Jobs can be filtered on their name, status, or the date and time that they were submitted. You can set only one filter at a time.
    ///   - maxResults: The maximum number of results to return in each page. The default is 100.
    ///   - logger: Logger used for logging
    @inlinable
    public func listTopicsDetectionJobsPaginator(
        filter: TopicsDetectionJobFilter? = nil,
        maxResults: Int? = nil,
        logger: Logger = AWSClient.loggingDisabled        
    ) -> AWSClient.PaginatorSequence<ListTopicsDetectionJobsRequest, ListTopicsDetectionJobsResponse> {
        let input = ListTopicsDetectionJobsRequest(
            filter: filter, 
            maxResults: maxResults
        )
        return self.listTopicsDetectionJobsPaginator(input, logger: logger)
    }
}

extension Comprehend.ListDatasetsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListDatasetsRequest {
        return .init(
            filter: self.filter,
            flywheelArn: self.flywheelArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListDocumentClassificationJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListDocumentClassificationJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListDocumentClassifierSummariesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListDocumentClassifierSummariesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListDocumentClassifiersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListDocumentClassifiersRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListDominantLanguageDetectionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListDominantLanguageDetectionJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListEndpointsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListEndpointsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListEntitiesDetectionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListEntitiesDetectionJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListEntityRecognizerSummariesRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListEntityRecognizerSummariesRequest {
        return .init(
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListEntityRecognizersRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListEntityRecognizersRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListEventsDetectionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListEventsDetectionJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListFlywheelIterationHistoryRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListFlywheelIterationHistoryRequest {
        return .init(
            filter: self.filter,
            flywheelArn: self.flywheelArn,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListFlywheelsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListFlywheelsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListKeyPhrasesDetectionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListKeyPhrasesDetectionJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListPiiEntitiesDetectionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListPiiEntitiesDetectionJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListSentimentDetectionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListSentimentDetectionJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListTargetedSentimentDetectionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListTargetedSentimentDetectionJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}

extension Comprehend.ListTopicsDetectionJobsRequest: AWSPaginateToken {
    @inlinable
    public func usingPaginationToken(_ token: String) -> Comprehend.ListTopicsDetectionJobsRequest {
        return .init(
            filter: self.filter,
            maxResults: self.maxResults,
            nextToken: token
        )
    }
}
